不同语言的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


2
0

深入Go底层原理,重写Redis中间件实战

深入Go语言原理+Go重写Redis

474 学习 · 172 问题

查看课程