详解golang net之TCP底层
golang版本1.12.9;操作系统:readhat 7.4 golang的底层使用epoll来实现IO复用。netPoll将文件描述符与底层进行了绑定。netpoll实现了用户的与底层网络IO相关的goroutine阻塞/非阻塞管理。 对netpoll的介绍按照这篇 文章 的思路按照tcp建链中的listen/accept/read/write/close动作详解过程。 下面以TCP为例完整解析TCP的建链/断链以及读写过程 listen流程: ListenTCP --> listenTCP --> internetSocket --> socket --> listenStream unix的listen函数用于将一个socket转换为监听socket。golang中同时结合了创建socket的步骤。 // src/net/tcpsock.gofunc ListenTCP(network string, laddr *TCPAddr) (*TCPListener, error) { switch network { //支持tcp协议为”tcp4“和“tcp6”,当使用"tcp"时可以通过地址格式进行判断 case "tcp", "tcp4", "tcp6": default: return nil, &OpError{Op: "listen", Net: network,