없어지지 않는 LISTEN, CLOSE_WAIT
글쓴이: dongyuri / 작성시간: 수, 2006/10/04 - 9:56오전
서버 프로그램을 운용중에 있습니다.
다수의 클라이언트와 접속, 재접속 등의 테스트를 하다가
프로세스가 종료되었음에도 불구하고
프로세스가 점유했던 port가 반환이 되지 않습니다.
netstat -an 으로 검색을 해 보면
이미 종료한 프로세스가 쓰던 port로
LISTEN하나와 CLOSE_WAIT가 다수 검색이 됩니다.
그래서, 서버 프로그램을 실행하려면,
해당 port를 쓸수가 없습니다.
실행환경은 솔라리스 9입니다.
서버 reboot을 하기 어려운 상황이라,
죽은(?)프로세스가 점유하고 있는 해당 port를 반환하는 방법을 알고자 합니다.
Forums:
port 반환
소켓 바인드하기 전에 setsockopt로 SO_REUSEADDR 옵션을 먼저 지정해주세요.
그러면 대부분의 경우 포트를 할당 받을수 있습니다. 정상적으로 포트를 할당받기위해서는
기존에 돌아가던 프로그램도 SO_REUSEADDR 옵션을 사용중이었어야 할겁니다. 그러니
확실하게 하기 위해서는 프로그램 고치시고 리부팅하시고 하시면 됩니다.
만약에 그래도 포트 할당 못받으면, 그 전에 돌던 프로그램의 자식 프로세스가 있는지
찾아보세요. 강제로 kill하면 대부분의 경우 해결되더군요.
--
http://mix1009.net
반환되지 않는
반환되지 않는 소켓이 CLOSE_WAIT나, LISTEN이나 뭐 같다고 하더라도...
LISTEN port가 반환되는 경우는 처음입니다.
혹시 같은 경험 가지신 분 계신가요?
댓글 달기