我希望能够重用一些端口,这就是为什么我在套接字上使用 setsockopt 的原因,其代码如下:
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
但是,这实际上不起作用。我也没有遇到绑定(bind)错误,但是服务器套接字没有响应(它似乎已启动,但是如果我尝试连接到它,则它不会进入选择循环)。如果脚本意外结束,并且如果我更改服务器正在监听的端口,则会出现此行为。你能提供一些建议吗?
编辑:我将套接字重命名为 socks 。这只是我为该代码段选择的名称。
最佳答案
看来Windows和Unix上的SO_REUSEADDR具有不同的语义。
请参见此msdn article(尤其是下面的“使用SO_EXCLUSIVEADDRUSE”中的图表)和此unix faq。
另外,请参阅此python bug discussion,此twisted bug discussion以及此差异列表between Windows and Unix sockets。