본문 바로가기

[+] Information/[-] Network

[2009/06/13] 소켓 연결의 우아한 종료

1. 입력 및 출력 스트림

 - 입력 스트림 : 데이터 수신을 위한 스트림

 - 출력 스트림 : 데이터 전송을 위한 스트림




2. 소켓 연결 종료의 문제점

 - close, closesocket 함수의 호출 : 입력 출력 스트림 완전 종료.

 - 일방적인 방식의 완전종료는 경우에 따라서 문제가 될 수 있다.





3. Half-close

 
- Half-close : 입력 및 출력 스트림 중 하나의 스트림만 종료하는 행위.



4. Half-close 기능의 함수 [리눅스]

#include <sys/socket.h>

int shutdown(int s, in how);

 상수값 모드 정의 
 0 SHUT_RD 입력 스트림 종료
 1 SHUT_WR 출력 스트림 종료
 2 SHUT_RDWR 입 출력 스트림 종료





5. Half-close 기능의 함수 [윈도우]

#include <winsock2.h>

int shutdown(SOCKET s, int how);

상수값 모드 정의
0 SD_RECEIVE  입력 스트림 종료
SD_SEND   출력 스트림 종료
2 SD_BOTH    입 출력 스트림 종료


6. 출력 스트림의 종료의 필요성

 - 출력 스트림을 종료하게 되면, 연결되어 있던 호스트로 EOF 메시지 전달.

 - EOF의 전송으로 데이터 전송의 끝을 알려 줄 수 있다.

 - EOF 전송 시, 상대 호스트의 데이터 수신 함수(read, recv)는 0을 리턴.