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