0

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

及时等待我检查了大约 30 秒后它是否超时,我不想等那么久。

4

2 回答 2

2

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

仅当在对端口执行绑定 (2) 的先前程序和想要重用端口的程序中都设置了此选项时,Linux 将仅允许使用 SO_REUSEADDR 选项重用端口。这与一些实现(例如,FreeBSD)不同,其中只有后面的程序需要设置 SO_REUSEADDR 选项。通常,这种差异是不可见的,因为例如,服务器程序旨在始终设置此选项。

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

于 2013-10-15T15:36:55.057 回答
0

设置 SO_REUSEADDR 套接字选项。使用 SO_REUSEADDR 的另一点可能会出现错误,“地址已在使用中”。SO_REUSADDR 允许使用卡在 TIME_WAIT 中的端口,但我们仍然无法使用该端口与它连接的最后一个端口建立连接。如果服务器在 3000,则连接到客户端端口 4000,然后在本地关闭,将该端口留在 TIME_WAIT 中。我们可以立即重用服务器端口 4000 连接到除客户端端口 4000 之外的任何地方

于 2014-11-07T06:31:37.197 回答