不同语言的socket是怎么实现的?
来源:8-10 实战:怎样结合阻塞模型和多路复用?

班小吉
2022-05-27
有一个问题没搞明白,想请教一下老师
通常,要进行网络编程,在c语言中我们要引入一个sys/socket.h头文件,里面封装了socket的函数。但是,如果不能用系统库的时候,比如go的网络方案,它的底层并没有去引入一个sys/socket.h头文件,那么它是如何实现和操作系统的网络协议栈进行交互的呢?
这部分应该看什么资料可以搞清楚?
写回答
1回答
-
Moody
2022-05-27
Go这块是用汇编实现的系统调用,具体可以看sys_linux_amd64.s里面的各个方法,比如:
// func epollctl(epfd, op, fd int32, ev *epollEvent) int TEXT runtime·epollctl(SB),NOSPLIT,$0 MOVL epfd+0(FP), DI MOVL op+4(FP), SI MOVL fd+8(FP), DX MOVQ ev+16(FP), R10 MOVL $SYS_epoll_ctl, AX SYSCALL MOVL AX, ret+24(FP) RET
20
相似问题