TCP session의 종료 시점
글쓴이: gilgil / 작성시간: 월, 2012/04/16 - 5:50오후
며칠 전에 프로그램을 짜다가 알아낸 허접 팁입니다.
1. TCPClient 객체를 생성한다.
2. 서버에 TCP connection을 맺는다. 서버는 외부에 있고(좀 멀리 있고), 항상 연결될 수 있다고 가정한다.
3. 클라이언트에서 서버로 대략 5 M byte를 send 라는 API를 이용해서 전송을 한다.
4. send 함수 실행이 완료되자 마자(send라는 함수는 성공을 했지만 아직 서버로 전송이 완료되지는 않음) TCP Client 객체를 해제하고 프로그램을 종료한다.
위의 절차를 거치면서 패킷을 잡아 봤습니다. 재미있게도 4번 행위가 끝나고 난 이후에도, 한참동안(대략 5~10초 정도) TCP Data가 클라이언트에서 서버로 전송이 되는 것을 확인하였습니다. 즉 어플이 TCP stack에 명령을 한 TCP Data 전송 명령은 소켓이 해제되거나 프로세스가 종료되어도, TCP stack이 살아 있는한, 그 TCP session은 계속해서 유지됨을 알 수가 있습니다(다만 해당 프로세스를 강제 종료를 하면 TCP session도 강제 종료 시점에 없어 짐).
단 TCP socket을 닫기(closesocket) 이전에 shutdown(handle, SD_SEND)이라는 것을 호출해서 제대로 된 전송을 TCP stack에 알려 주고 socket을 닫아야 한다고 합니다(OS마다 조금씩 다른 듯).
이상 허접 팁이었습니다.
Forums:
댓글 달기