Windows的setsockopt有问题吗?

2 投票
2 回答
2149 浏览
提问于 2025-04-15 11:17

我想重复使用一些端口,所以我在我的套接字上使用了setsockopt,代码如下:

sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

不过,这个方法并没有真正奏效。我没有收到绑定错误,但服务器套接字就是不响应(看起来是启动了,但如果我尝试连接它,就不会进入选择循环)。这种情况发生在脚本意外结束的时候,如果我更改服务器监听的端口,一切又都正常了。你能给我一些建议吗?

补充:我把套接字的名字改成了sock。这只是我为这段代码选择的一个名字。

2 个回答

1

setsockopt 是一个套接字对象的方法。模块 socket 本身并没有 setsockopt 这个属性。

3

看起来,SO_REUSEADDR在Windows和Unix系统上的表现是不一样的。

可以参考这篇msdn文章(特别是下面关于“使用SO_EXCLUSIVEADDRUSE”的表格)和这篇unix常见问题解答

另外,还可以查看这个关于python的bug讨论,这个关于twisted的bug讨论,以及这份Windows和Unix套接字之间的差异列表

撰写回答