충돌하는 프로그램의 포트 바인딩을 해제합니다.

충돌하는 프로그램의 포트 바인딩을 해제합니다.

프로그램이 충돌했을 때 이전에 프로그램에 의해 바인딩되었던 포트를 바인딩 해제할 수 있는 방법이 있습니까? 나는 매 시간마다 개발 머신을 다시 시작하는 것을 좋아하지 않습니다.

답변1

프로그램이 연결되어 있는 동안과 프로세스를 종료한 후 포트가 유지되는 시간 제한을 정의할 수 있습니다.

시간 제한 변경과 관련된 커널 변수는 다음과 같습니다.

에서:리눅스 TCP 튜닝

/proc/sys/net/ipv4/tcp_tw_reuse - 이를 통해 프로토콜 관점에서 안전할 때 TIME_WAIT 상태의 소켓을 새로운 연결에 재사용할 수 있습니다. 기본값은 0(비활성화)입니다. /proc/sys/net/ipv4/tcp_fin_timeout- 이 설정은 TCP/IP가 닫힌 연결을 해제하고 해당 리소스를 재사용하기 전에 경과해야 하는 시간을 결정합니다. 이 TIME_WAIT 상태 동안 클라이언트에 대한 연결을 다시 여는 데 드는 비용은 새 연결을 설정하는 데 드는 비용보다 적습니다. 이 항목의 값을 줄이면 TCP/IP는 닫힌 연결을 더 빨리 해제하여 새 연결에 더 많은 리소스를 사용할 수 있습니다.

다음 방법으로 일시적으로 변경할 수 있습니다.

sudo sysctl -w sudo sysctl -w net.ipv4.tcp_fin_timeout=30
sudo sysctl -w sudo sysctl -w net.ipv4.tcp_tw_reuse=1

또는 구성을 영구적으로 추가하려면 다음을 편집 /etc/sysctl.conf하고 추가하십시오.

net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_tw_reuse=1

따라서 시작 시에도 적용됩니다.

자세한 내용은 다음을 읽어보세요.TIME_WAIT 소켓 연결 줄이기

애플리케이션 수준에서는 이 문서에 따라 양말을 열 때 SO_REUSEADDR을 지정할 수도 있습니다.https://stackoverflow.com/questions/767292/how-do-i-close-a-port-in-a-case-of-program-termination

dr01이 말했듯이 또 다른 옵션은 수동으로 수행하는 것입니다.

service networking restart

관련 정보