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