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/10071107/rebound-a-port-to-datagram-socket-on-a-difftent-ip