관리 메뉴

드럼치는 프로그래머

[TCP/IP] 소켓 연결의 우아한 종료 본문

★─Programing/☆─TCP IP

[TCP/IP] 소켓 연결의 우아한 종료

드럼치는한동이 2009. 6. 19. 02:53
1.소켓 연결 종료의 문제점
-파일 디스크립터를 이용한 close함수의 호출은 연결의 완전종료를 의미한다.
-일방적인 방식의 완전 종료는 경우에 따라서 문제가 될수 있다.

소켓과 스트림(stream)
-입력 스트림:데이터 수신을 위한 스트림
-출력 스트림:데이터 전송을 위한 스트림
 
 
우아한 소켓의 연결 종료
-스트림 half-close 기능의 함수
#include <sys/socket.h>
int shutdown(int s, int how);
==>성공시 0,실패시 -1 리턴
==>s:종료하고자 하는 소켓의 파일 디스크립터를 전달 한다.
==>how: 종료 모드를 인자로 전달한다.
==>shutdown 함수의 how인자 매크로
상수값        모드                  정의
0            SHUT_RD       입력 스트림 종료
1            SHUT_WR      출력 스트림 종료
2            SHUT_RDWR  입출력 스트림 종료

 
2.half-close 기능이 필요한 경우의 예제
-서버는 클라이언트로의 파일 전송이 끝나면 모든 데이터가 전송되었음을 알려주기 위해서 소켓을 종료하게 될것이다.그러면 EOF도 전송이 되고 클라이언트도 데이터 수신을 완료하면서 종료하게 되다.==>이 경우에는 서버가 반드시 half-close 해야한다.
 
출력 스트림의 종료의 필요성

 

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

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

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



Comments