[Network] 7. 소켓의 우아한 종료

2023. 5. 28. 15:17

 

TCP 기반의 Half-close

일방적인 연결 종료의 문제점

close 및 closesocket 함수의 기능
소켓의 완전소멸을 의미한다. 

=> 상대방의 상태에 상관 없이 일방적인 종료의 형태를 띤다. 그래서 상대 호소트의 데이터 송수신 아직 완료되지 않은 상황이라면, 문제가 발생할 수 있다. 이러한 문제의 대안으로 Half-close 기법이 존재한다.

 

소켓의 half-close 

종료를 원한다는 것은, 더 이상 전송할 데이터가 존재하지 않는 상황이다. 
그러니 입력 스트림은 종료해도 되지만, 상대방이 할 말이 남아있을 수 있다. 그러니 출력스트림은 남겨두는 것이 좋다.

입력 스트림만 종료할 때 사용하는 것이 half-close 라고 한다. 

 

Half close를 구하기 위한 shut-down 함수

#include <sys/socket.h>

int shutdown(int sock, int howto);

 

close 함수가 호출되면, 상대 호스트로 EOF가 전달된다. 이는 모든 데이터의 전송이 끝났다는 신호의 의미를 갖는다. 그런데 출력 스트림 종료만 해도 EOF가 전달이 되기 때문에 close 함수를 대체하고도 상대 호스트의 종료를 기다릴 수 있다. 

BELATED ARTICLES

more