为什么tcp套接字地址可以在不设置SO_REUSEADDR的情况下直接重用?

我正在阅读Python网络编程的基础知识,并尝试如下代码。为什么tcp套接字地址可以在不设置SO_REUSEADDR的情况下直接重用?

https://github.com/brandon-rhodes/fopnp/blob/m/py3/chapter03/tcp_sixteen.py

当评论说,在socket.SO_REUSEADDR打开行,它提出了在Linux上的OSERROR,一切都很好。但是在Win8上,即使我明确地关闭socket.SO_REUSEADDR,它也表现得像正常一样。这是为什么?

回答:

通常必须使用SO_REUSEADDR标志,当服务器套接字处于TIME_WAIT状态时。这是一种非常保守的方式,可以确保来自先前连接的任何杂散数据最终不会再被服务器接收到,并会造成混淆,因为序列号可能与前一个连接不一致。通常发生这种情况的可能性非常低。 TIME_WAIT状态的超时时间非常长(通常为30秒)。

的操作系统可能会选择允许重用通过设置一些配置参数的连接。例如。在Linux中它是/proc/sys/net/ipv4/tcp_tw_*。 This link已经得到了它的细节。

this link已经得到了一些关于它的详细信息窗口。你可能想要检查这个值是什么。或者,如果您打开大量连接,则很可能 - 连接a很快会被Windows重新使用,而您没有明确需要SO_REUSEADDR,如可用的TCB块数较少的链接中所述。

以上是 为什么tcp套接字地址可以在不设置SO_REUSEADDR的情况下直接重用? 的全部内容, 来源链接: utcz.com/qa/257985.html

回到顶部