Tcp

如何立即連接到埠,避免 socket_bind(): 無法綁定地址?

  • August 18, 2013

在執行應該從 TCP/IP 埠讀取的程式碼時,我經常收到以下消息(具體取決於所使用的語言):

socket_bind(): unable to bind address

我知道當其他程序偵聽此埠/綁定到此埠時會發生這種情況(我不知道要描述的確切片語),因此我的程式碼無法偵聽該埠。但是,是我剛剛停止的程式碼(通過 CTRL-C)阻塞了這個埠!似乎涉及一些超時,等待一段時間(大約 30 秒)後,我可以啟動我的程式碼來偵聽這個特定的埠而不會出現問題。

我想知道:

  • 為什麼我已經停止了程式碼,但埠仍然被阻塞?
  • 如何強制系統釋放此埠,以便我可以重新啟動程式碼並開始偵聽此埠?

假設您說的是 C/C++,請使用setsockopt()and 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

引用自:https://unix.stackexchange.com/questions/72089