我正在使用LwIP 1.4.1,我的tcp服务器关闭卡在TIME_WAIT状态,因此我无法再次在同一端口上打开服务器。我试过了SO_REUSE (#define SO_REUSEADDR 1
),但这也行不通,有人有想法吗?
及时等待我检查一下,大约30秒后,它会超时,我不想等那么久。
答案 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以外的任何地方