TCP
close / closesocket 함수
- 소켓의 완전소멸 >> 더이상 입출력 불가능
- 상대방의 상태와는 관련 없는 일방적인 종료
- 상대 호스트의 송수신이 덜 끝났을시 문제가 된다.
Active / Passive close
- Active close : 연결 종료를 처음 요청
- Passive close : 연결 요청을 받은 쪽
- 두번째 FIN 이후 FIN을 받은 쪽에서 FIN-ACK를 보내는데, 이 ACK 가 손실될 가능성을 방지하기 위해 FIN-ACK를 보내고 잠시 기다린다.
Half-close
- 보내는것만 닫거나 받는것만 닫거나
- 상대방도 종료를 원하는지 확인되지 않다면, 출력 스트림만 종료한다.
- 우아한 종료라 부른다.
shutdown 함수
#include <sys/socket.h>
int shutdown(int sock, int howto);
성공시 0, 실패시 -1 반환
sock - 종료할 소켓 파일디스크립터
howto - 종료방법에 대한 정보 전달
SHUT_RD - 입력 스트림 종료
SHUT_WR - 출력스트림 종료
SHUT_RDWR - 입출력 스트림 종료
- close 함수 호출시 상대 소켓으로 EOF가 전달된다.
- 출력 스트림만 종료해도 EOF 전달 -> 상대 호스트의 종료를 기다린다.