请帮忙,
首先,我创建了一个套接字并将其绑定到没有SO_REUSEADDR的地址。
然后,我的程序崩溃了(没有正确关闭套接字)
接下来,我再次运行它,并从bind()
返回“Address in in use”我尝试修改源代码以使用SO_REUSEADDR,但它没有用。
现在,我无法再次运行绑定(服务器无法重新启动)
答案 0 :(得分:6)
您只需要等到会话超时,然后才会完全删除。
当会话以“脏”方式关闭时,您不能再次重复使用该地址(假设您没有使用SO_REUSEADDR)两倍于最大段生命周期 - 通常这对于常规网络硬件大约需要4分钟它实际上取决于媒体的属性(例如卫星可能有更大的MSL)。
这是为了确保任何仍处于转换状态的数据包都不会到达,并在新会话中搞砸你的顺序。