【问题标题】:Is windows's setsockopt broken?windows的setsockopt坏了吗?
【发布时间】:2009-04-28 09:14:59
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您应该在您的套接字上调用 setsockopt,但您似乎没有这样做。你确定你没有隐藏内置?
  • 这只是我为这个sn-p选择的一个名字。
  • 这个问题应该改名为“Windows 的 SO_REUSEADDR 坏了吗?”

标签: python windows sockets setsockopt


【解决方案1】:

似乎 SO_REUSEADDR 在 Windows 和 Unix 上具有不同的语义。

请参阅此msdn article(特别是“使用 SO_EXCLUSIVEADDRUSE”下方的图表)和此unix faq

另外,请参阅此python bug discussion、此twisted bug discussion 和此差异列表between Windows and Unix sockets

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我在这个示例套接字中命名了我的套接字对象。在我的代码中,它的名字是“listening_sock”
    猜你喜欢
    • 2012-05-23
    • 2010-11-21
    • 2021-12-31
    • 2015-03-04
    • 2016-09-08
    • 2011-07-14
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多