2

请帮忙,

起初,我创建了一个套接字并将其绑定到没有 SO_REUSEADDR 的地址。

然后,我的程序崩溃了(没有正确关闭套接字)

接下来,我再次运行它并从 bind() 返回“地址已在使用中”

我试图修改源代码以使用 SO_REUSEADDR 但它没有用。

现在,我无法再次运行 bind(无法重新启动服务器)

4

1 回答 1

6

您只需要等到会话超时,然后它将被完全删除。

当会话以“脏”的方式关闭时,您不能再次重用该地址(假设您没有使用 SO_REUSEADDR)两倍的最大段生命周期 - 通常这对于常规网络硬件来说大约是四分钟,尽管它实际上取决于关于介质的特性(例如,卫星可能具有更大的 MSL)。

这是为了确保任何仍在转换中的数据包都不会到达并在新会话中搞砸您的排序。

于 2013-01-31T08:32:01.023 回答