地址已被使用错误

地址已被使用错误

当您启动一个程序来监听 TCP 套接字然后终止该程序时,有时(但并非总是)当您在接下来的几分钟内再次尝试监听套接字时,您会收到“地址已被使用”之类的错误。使用 ctrl-c 终止该进程。我使用 linux。

我认为这与 TCP 连接卡在 CLOSE_WAIT 状态有关,但我不能 100% 确定。为什么我会收到“地址已在使用中”错误?

此外,为什么这种情况只是有时发生?

答案1

IP 堆栈中有一个功能可以防止进程过快地重新打开处于侦听模式的套接字(我认为需要等待 2 分钟)。当今大多数程序在创建套接字时都会使用 SO_REUSEADDR 标志来删除此功能。也许您的程序没有使用此标志?

答案2

尝试使用 netstat 查看端口的状态或 lsof -i: 在终止它之后查看哪些程序仍在使用该端口(如果有)。

答案3

你用什么语言写的?

如果您使用 C 语言编写,可能需要检查 setsockopt() 或更好的 select()。

正如所说,有一些函数可以使套接字可重复使用。

相关内容