套接字API是TCP/IP和UDP/IP通信的事实标准(即我们所知的网络代码).然而,它的核心功能之一,accept()有点神奇.
借用半正式定义:
在服务器端使用accept().它接受从远程客户端创建新TCP连接的接收传入尝试,并创建与此连接的套接字地址对关联的新套接字.
换句话说,accept返回一个新的套接字,服务器可以通过该套接字与新连接的客户端进行通信.旧套接字(在其accept上调用)保持打开状态,在同一端口上侦听新连接.
accept工作怎么样?它是如何实现的?这个话题有很多混乱.许多人声称接受打开一个新端口,并通过它与客户沟通.但这显然不是真的,因为没有新的端口被打开.你实际上可以通过同一个端口与不同的客户端进行通信,但是如何?当多个线程调用recv同一个端口时,数据如何知道去哪里?
我想这是客户端地址与套接字描述符相关联的内容,每当数据通过时recv它被路由到正确的套接字,但我不确定.
对这种机制的内部运作进行彻底的解释是很好的.