地址已经在使用错误

当你启动一个程序来侦听一个TCP套接字,然后杀掉这个程序,有时(但不是总是),当你尝试在接下来的几分钟里再次侦听套接字时,你会得到一个像“地址已经被使用”的错误。 proc用ctrl-c杀死。 我使用Linux。

我认为这与TCP连接被锁在CLOSE_WAIT状态有关,但并非100%确定。 为什么我得到“地址已被使用”错误?

另外,为什么只有时有发生?

IP堆栈中有一项function,可以防止进程在侦听模式下以太快的速度重新打开套接字(我认为这是一个2分钟的等待时间)。 当今大多数程序在创build套接字时通过使用SO_REUSEADDR标志创build套接字时删除了此function。 也许你的程序不使用这个标志?

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

你在用哪种语言写作?

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

正如所说的那样,有使sockets可重用的function。