gpt4 book ai didi

sockets - Unix 中的 accept() 函数实现

转载 作者:可可西里 更新时间:2023-11-01 02:35:08 25 4
gpt4 key购买 nike

我查阅了 BSD 代码,但在某个地方迷路了 :(

我想检查的原因是:

TCP RFC ( http://www.ietf.org/rfc/rfc793.txt) sec 2.7 状态:

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

这是否意味着:socket = local (ip + port) ?

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

PS:本人网络编程小白

[更新] 我明白了我读到的@ How does the socket API accept() function work? .我唯一的疑问是:如果 socket = (local port + local ip),那么一个新的套接字就意味着同一个 IP 的一个新端口。按照这个逻辑,accept 返回一个新套接字(因此创建了一个新端口)。所以所有发送都应该通过这个新端口进行。我在这里的理解是否正确?

最佳答案

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

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

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

关于sockets - Unix 中的 accept() 函数实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13243277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com