CLOSE_WAIT
Active close를 client가 하는 경우 Passive close를 하는 서버측에서는
CLOSE_WAIT 상태에 이를수 있다.
반대로 Active close하는 클라이언트 측은 FIN_WAIT2 상태에서 대기하다가 일정시간(net.ipv4.tcp_fin_timeout ; 2*Maximum Segment Lifetime= 60sec)에서 TIME_WAIT 상태가 된다.
FIN_WAIT2(커널옵션으로)나 TIME_WAIT(고정값?)은 타임아웃처리가 가능하나 CLOSE_WAIT은 close해주는 작업이 필요하다...
- CLOSE_WAIT 상태 : 어플리케이션에서 close()를 적절하게 처리해주지 못하면, TCP 포트는 CLOSE_WAIT 상태로 계속 기다리게 된다. 이렇게 CLOSE_WAIT 상태가 statement에 많아지게 되면, Hang 이 걸려 더이상 연결을 하지 못하는 경우가 생기기도 한다. 따라서 어플리케이션 개발시 여러 상황에 따라 close() 처리를 잘 해줘야 한다.
SIGPIPE 받아서 close 해주거나
아니면 socket api의 리턴값을 체크해서 close를 해주는 코드 추가
signal(SIGPIPE, to_exit);
signal(SIGHUP, to_exit);
signal(SIGINT, to_exit);
signal(SIGQUIT, to_exit);
signal(SIGABRT, to_exit);
signal(SIGTERM, to_exit);
signal(SIGSEGV, to_exit);
signal(SIGBUS, to_exit);