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

What does it mean that accept() creates a new socket?

我的问题是基于以下理解

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

  1. I tried to implement my own server where socket() and accept() returns different socket descriptor value (Is it always the case?).

是的。

  1. My question is why is it said that accept() creates a new socket if no new port is opened in server and ip:port is same for both the socket descriptors returned by socket() and accept(). If new socket is created by accept() how is it different than the socket created by socket()?

因为第一个socket是用来等待通信的,第二个是用来通信的。调用 socket (+bind+listen) 准备一个通信端点,又名 socket (或 服务器套接字) 接听来电。在准备好的通信点上调用 accept,等待传入呼叫,当发生这种情况时,会创建一个通信通道(2 个端点 + 协议),由 连接的套接字 调用返回。

C API 可能会让您感到困惑,因为两者都称为套接字,但实际上用途不同。在其他一些 languages/API 中进行了区分。例如,在 Java 中,您有 ServerSocket 用于等待来电,而 Socket 用于通信。