Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets accept()函数在Unix中的实现_Sockets_Networking_Tcp_Network Programming - Fatal编程技术网

Sockets accept()函数在Unix中的实现

Sockets accept()函数在Unix中的实现,sockets,networking,tcp,network-programming,Sockets,Networking,Tcp,Network Programming,我查过BSD代码,但在某处迷路了:( 我想检查的原因是: TCP RFC()第2.7节规定: “为了在每个TCP中提供唯一的地址,我们将标识TCP的internet地址与端口标识符连接起来,以创建一个在所有连接在一起的网络中都是唯一的套接字。连接完全由两端的套接字对指定。” 这是否意味着:套接字=本地(ip+端口) 如果是,那么Unix的accept函数将返回一个新的套接字描述符。这是否意味着将创建一个新的套接字(从而创建一个新端口)以响应客户端请求 PS:我是网络编程的新手 [更新]我理解我读

我查过BSD代码,但在某处迷路了:(

我想检查的原因是:

TCP RFC()第2.7节规定:

“为了在每个TCP中提供唯一的地址,我们将标识TCP的internet地址与端口标识符连接起来,以创建一个在所有连接在一起的网络中都是唯一的套接字。连接完全由两端的套接字对指定。”

这是否意味着:套接字=本地(ip+端口)

如果是,那么Unix的accept函数将返回一个新的套接字描述符。这是否意味着将创建一个新的套接字(从而创建一个新端口)以响应客户端请求

PS:我是网络编程的新手

[更新]我理解我读到的内容。 我唯一的疑问是:如果socket=(本地端口+本地ip),那么一个新的socket就意味着同一ip的一个新端口。按照这个逻辑,accept返回一个新的socket(因此创建了一个新端口)。因此所有发送都应该通过这个新端口进行。
我在这里理解的正确吗?

您基本上是正确的。当您
accept()
时,将创建一个新套接字,侦听套接字保持打开状态以允许更多传入连接,但新套接字使用与侦听套接字相同的本地端口号

连接由5元组定义:协议、本地地址、本地端口、远程地址、远程端口


因此,每个接受的连接都是唯一的,即使它们共享相同的本地端口号,因为远程ip/端口总是不同的。侦听套接字没有远程ip/端口,因此也是唯一的。

如果套接字确实是ip+端口,那么新套接字不应该有一个与之关联的新端口吗?(sry无法提升你的声誉,因为你的声誉分数很低……我是个新手)@user1801732这与原始问题相同,该问题的答案是此答案。接受的连接套接字必须与侦听套接字具有相同的端口号。如果它发生更改,客户端将无法知道新值,并且初始TCP握手将失败。'socket=(本地端口+本地IP)你的结论是基于一个错误的前提。