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

问题描述 投票:1回答:1

我的问题基于以下理解

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

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

linux sockets network-programming client-server
1个回答
3
投票
  1. 我试图实现我自己的服务器,其中socket()和accept()返回不同的套接字描述符值(总是这样吗?)。

是。

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

因为初始套接字用于等待通信,而第二个套接字用于通信。对socket(+ bind + listen)的调用准备了一个通信端点,即socket来接收来电。在准备充分的通信点上调用accept,等待来电,当发生这种情况时,会创建一个由呼叫返回的连接套接字表示的通信信道(2个端点+协议)。

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

© www.soinside.com 2019 - 2024. All rights reserved.