我正在阅读Python编程的基础,并尝试如下代码。
当注释打开socket.SO_REUSEADDR的行时,它会在Linux上引发一个OSError,一切都很好。但是在Win8上,即使我显式地关闭了socket.SO_REUSEADDR,它的行为也是正常的。为什么会有这种行为?
发布于 2015-06-26 13:01:22
通常,当服务器套接字处于SO_REUSEADDR状态时,必须使用TIME_WAIT标志。这是一种非常保守的方法,可以确保来自先前连接的任何杂散数据不会被服务器再次接收,并造成混乱,因为序列号可能与以前的序列号不同。通常情况下,发生这种情况的可能性很低。TIME_WAIT状态的超时非常高(通常为30秒)。
OS可能会选择通过设置一些配置参数来允许重用连接。例如:在Linux中,它是/proc/sys/net/ipv4/tcp_tw_*。这个链接已经得到了有关它的详细信息。
此链接已经有了一些关于windows的细节。您可能需要检查这个值是多少。或者,如果您正在打开大量连接,很可能--连接a被Windows快速重复使用--而不必显式地需要SO_REUSEADDR,如链接中所述,可用的TCB块数量较少。
https://stackoverflow.com/questions/31072396
复制相似问题