Tcp服务器关闭卡在TIME_WAIT,无法再次在同一端口上打开服务器

时间:2013-10-15 12:50:26

标签: c sockets tcp tcp-ip

我正在使用LwIP 1.4.1,我的tcp服务器关闭卡在TIME_WAIT状态,因此我无法再次在同一端口上打开服务器。我试过了SO_REUSE (#define SO_REUSEADDR 1),但这也行不通,有人有想法吗?

及时等待我检查一下,大约30秒后,它会超时,我不想等那么久。

2 个答案:

答案 0 :(得分:2)

在调用SO_REUSEADDR之前,您应该在套接字上设置bind()套接字选项:

  

Linux只允许使用SO_REUSEADDR选项进行端口重用          在前一个执行bind(2)的程序中都设置了选项          端口以及要重用端口的程序。这有所不同          来自一些实现(例如,FreeBSD),其中只有后一个程序          需要设置SO_REUSEADDR选项。通常这种差异是          不可见,因为,例如,服务器程序总是被设计          设置此选项。

您仍需要等待的事实表明该选项未设置。

答案 1 :(得分:0)

设置SO_REUSEADDR套接字选项。使用SO_REUSEADDR还有一点可以通过错误,#34;已经在使用的地址"。 SO_REUSADDR允许使用卡在TIME_WAIT中的端口,但我们仍然无法使用该端口建立与其连接的最后一个端口的连接。如果服务器位于3000,并连接到客户端端口4000,然后在本地关闭,则将该端口保留在TIME_WAIT中。我们可以立即重用服务器端口4000以连接除客户端端口4000以外的任何地方