2015년 6월 21일 일요일

CLOSE_WAIT

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);


단상

현재 위치를 정확히 인지하고 하고자하는 목표가 있다면 그 목표에 도달하기 위해서 무엇이 필요한지 나열해보자...

- 일요일 오전에는 독서하자
- 출퇴근 이동 중에 짤막한 글(10페이지 이내)을 읽자
- 아침 업무 시작전에 마인드맵으로 정리하자