gpt4 book ai didi

c - 使用 SO_REUSEADDR - 之前打开的套接字会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 16:23:41 25 4
gpt4 key购买 nike

在 unix 网络编程中,我总是在服务器使用的套接字上设置 SO_REUSEADDR 选项来监听连接。这基本上表示可以在机器上的同一端口上打开另一个套接字。这在从崩溃中恢复并且套接字未正确关闭时非常有用 - 应用程序可以重新启动,它只会在同一端口上打开另一个套接字并继续监听。

我的问题是,旧套接字会怎样?毫无疑问,所有数据/连接仍将在旧套接字上接收。它会被操作系统自动关闭吗?

最佳答案

当使用它的程序终止时,一个套接字被认为是关闭的。这么多由操作系统处理,操作系统将拒绝接受死对话的任何进一步通信。但是,如果套接字意外关闭,另一端的计算机可能不知道对话已经结束,并且可能仍在尝试通信。

这就是为什么在 TCP 规范中设计了一个等待期,然后才能重复使用相同的端口号。因为从理论上讲,无论多么不可能,来自旧 session 的数据包都有可能以适当的 IP 地址、端口号和序列号到达,从而导致接收服务器意外地将其错误地插入到错误的 TCP 流中。

SO_REUSEADDR 选项覆盖该行为,允许您立即重用该端口。实际上,您是在说:“我了解风险,无论如何都想使用该端口。”

关于c - 使用 SO_REUSEADDR - 之前打开的套接字会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/775638/

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