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

时间:2018-06-07 14:06:14

标签: linux sockets network-programming client-server

我的问题基于以下理解

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

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

1 个答案:

答案 0 :(得分:2)

  1.   

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

    1.   

      我的问题是,为什么说如果没有,accept()会创建一个新的套接字   在服务器中打开新端口,并且对于两个套接字,ip:port都是相同的   socket()和accept()返回的描述符。如果是新套接字   由accept()创建它与创建的套接字有什么不同   插座()?

    2. 因为初始套接字用于等待通信,而第二个套接字用于通信。拨打socket(+ bind + listen)可以准备一个通信终端,即套接字来接听来电。在准备充分的通信点上呼叫accept,等待来电,当发生这种情况时,会创建由连接的插座表示的通信信道(2个端点+协议)通过电话回来。

      C API可能会让您感到困惑,因为它们都被称为套接字,但实际上并非用于相同的用途。在一些其他语言/ API中进行区分。例如,在Java中,您有ServerSocket用于等待来电,而Socket用于通信。