套接字地址已被使用 - 首先忘记SO_REUSEADDR

时间:2013-01-31 08:29:49

标签: c linux sockets

请帮忙,

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

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

接下来,我再次运行它,并从bind()

返回“Address in in use”

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

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

1 个答案:

答案 0 :(得分:6)

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

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

这是为了确保任何仍处于转换状态的数据包都不会到达,并在新会话中搞砸你的顺序。