如何立即连接到端口,避免socket_bind():无法绑定地址?

如何立即连接到端口,避免socket_bind():无法绑定地址?

当运行应该从 TCP/IP 端口读取的代码时,我经常收到以下消息(具体取决于所使用的语言):

socket_bind(): unable to bind address

我知道当其他进程侦听此端口/绑定到此端口时会发生这种情况(我不知道要描述的确切短语),因此我的代码无法侦听该端口。然而,它是我的代码我刚刚停止(通过 CTRL-C)它阻塞了这个端口!似乎涉及一些超时,等待一段时间(大约 30 秒)后,我可以启动我的代码来监听这个特定端口,没有任何问题。

我想知道:

  • 为什么我已经停止了代码,端口仍然被阻止?
  • 如何强制系统释放此端口,以便我可以重新启动代码并开始侦听此端口?

答案1

假设您正在谈论 C/C++,请使用setsockopt()SO_REUSEADDR。只要没有活动进程侦听该端口,就可以重用。

编辑:它仍在使用的原因是您没有适当地关闭套接字。你 Control-C 杀死了它。您可以使用netstat它来查看已打开或尚未完全关闭的端口。

http://www.beej.us/guide/bgnet/output/html/multipage/setsockoptman.html

https://stackoverflow.com/questions/9207781/error-in-binding-port-address-already-in-use-tcp-socket-programming-in-unix

https://stackoverflow.com/questions/10071107/rebinding-a-port-to-datagram-socket-on-a-difftent-ip

相关内容