[SOCKET]TCP KEEPALIVE 옵션 설정
TCP의 경우, connection oriented protocol이지만, 송수신 중, 상대방 프로세스가 종료되는 등 정상적인 상황이 아닌 경우에는 세션의 종료 여부를 감지할 수 없다. 단지, 송신 측 TCP 버퍼가 가득 찬 경우에 EAGAIN을 발생시킬 뿐이다. 다시 말해, LAN 케이블이 뽑힌다든지, 기타 비정상적인 종료가 있을 경우, 상대 측에서 감지할 수 없다는 것이다. TCP option 중, SO_KEEPALIVE라는 옵션이 있는데, setsockopt 함수에서 SO_KEEPALIVE를 1로 setting하면 소켓 내부적으로 일정시간 간격으로 heartbeat을 전송하여, 비정상적인 세션 종료에 대해 감지한다. 그런데 SO_KEEPALIVE를 설정할 경우, 시스템에서 설정한 시간 간격으로 세션..
2013. 8. 29.