accept() 创建一个新套接字是什么意思?



我的问题基于以下理解

  • 套接字由 ip:port 定义。服务器和客户端都有自己的套接字
  • 套接字连接由五个模块定义 server_ip、server_port、client_ip、client_port、协议
  • 套接字
  • 描述符是标识套接字的整数值

我尝试实现我自己的服务器,其中 socket(( 和 accept(( 返回不同的套接字描述符值(总是这样吗?我的问题是,如果服务器中没有打开新端口,为什么说 accept(( 会创建一个新套接字,并且 ip:port 对于 socket(( 和 accept(( 返回的套接字描述符都是相同的。如果新套接字是由accept((创建的,它与socket((创建的套接字有何不同?

  1. 我尝试实现自己的服务器,其中socket()accept()返回 不同的套接字描述符值(总是这样吗?

是的。

  1. 我的问题是为什么说如果没有,accept()会创建一个新套接字 在服务器中打开新端口,并且两个套接字的 IP:端口相同socket()accept()返回的描述符。如果新套接字是 创建者accept()它与由 创建的套接字有何不同socket()

因为第一个套接字用于等待通信,而第二个套接字用于通信。对socket(+bind+listen(的调用准备一个通信端点,也称为套接字(或服务器套接字(以接收传入呼叫。在准备好的通信点上accept呼叫,等待传入呼叫,发生这种情况时,会创建一个通信通道(2 个端点 + 协议(,该通道由呼叫返回的已连接套接字表示。

C API 可能会让您感到困惑,因为两者都称为套接字,但实际上不是用于相同的用途。在其他一些语言/API 中进行了区分。例如,在 Java 中,您有用于等待传入呼叫的ServerSocket,以及用于通信的Socket

最新更新