我正在使用 LwIP 1.4.1,我的 tcp 服务器关闭卡在 TIME_WAIT 状态,因此我无法再次在同一端口上打开服务器。我试过了SO_REUSE (#define SO_REUSEADDR 1
),但这也行不通,有人有想法吗?
及时等待我检查了大约 30 秒后它是否超时,我不想等那么久。
您应该SO_REUSEADDR
在调用之前在套接字上设置套接字选项bind()
:
仅当在对端口执行绑定 (2) 的先前程序和想要重用端口的程序中都设置了此选项时,Linux 将仅允许使用 SO_REUSEADDR 选项重用端口。这与一些实现(例如,FreeBSD)不同,其中只有后面的程序需要设置 SO_REUSEADDR 选项。通常,这种差异是不可见的,因为例如,服务器程序旨在始终设置此选项。
您仍然需要等待的事实表明该选项未设置。
设置 SO_REUSEADDR 套接字选项。使用 SO_REUSEADDR 的另一点可能会出现错误,“地址已在使用中”。SO_REUSADDR 允许使用卡在 TIME_WAIT 中的端口,但我们仍然无法使用该端口与它连接的最后一个端口建立连接。如果服务器在 3000,则连接到客户端端口 4000,然后在本地关闭,将该端口留在 TIME_WAIT 中。我们可以立即重用服务器端口 4000 连接到除客户端端口 4000 之外的任何地方