我的问题基于以下理解
我试图实现我自己的服务器,其中socket()和accept()返回不同的套接字描述符值(总是这样吗?)。我的问题是为什么如果在服务器中没有打开新端口,则accept()创建一个新的套接字:对于socket()和accept()返回的套接字描述符,port都是相同的。如果accept()创建了新套接字,它与socket()创建的套接字有什么不同?
是。
因为初始套接字用于等待通信,而第二个套接字用于通信。对socket
(+ bind
+ listen
)的调用准备了一个通信端点,即socket来接收来电。在准备充分的通信点上调用accept
,等待来电,当发生这种情况时,会创建一个由呼叫返回的连接套接字表示的通信信道(2个端点+协议)。
C API可能会让您感到困惑,因为它们都被称为套接字,但实际上并非用于相同的用途。在一些其他语言/ API中进行区分。例如,在Java中,您有用于等待传入呼叫的ServerSocket
和用于通信的Socket
。