2

我希望能够重用一些端口,这就是我在套接字上使用setsockopt的原因,代码如下:

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

然而,这并没有真正起作用。我也没有收到绑定错误,但服务器套接字只是没有响应(它似乎已启动,但如果我尝试连接它,它不会进入选择循环)。如果脚本意外结束,则会出现此行为,并且如果我更改服务器正在侦听的端口,一切都会再次运行。你能提供一些建议吗?

编辑:我将套接字重命名为 sock。这只是我为此代码片段选择的名称。

4

2 回答 2

3

看来 SO_REUSEADDR 在 Windows 和 Unix 上具有不同的语义。

请参阅此msdn 文章(特别是“使用 SO_EXCLUSIVEADDRUSE”下方的图表)和此unix 常见问题解答。

此外,请参阅此python 错误讨论、此扭曲错误讨论以及此Windows 和 Unix 套接字之间的差异列表。

于 2010-02-18T23:00:36.003 回答
1

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

于 2009-04-28T09:30:02.700 回答