728x90
반응형
tcp 프로토콜에서는 소켓의 종료과정이 명확하게 이루어져야 한다.
그렇지 않으면 양방향 통신을 하고 있는 두 호스트 사이에서 데이터의 손실등의 문제가 발생할 수 있다.
리눅스의 close함수는 소켓의 완전 종료를 의미하는데, 이렇게 되면 데이터 송수신이 다 완료되지 않았는데 소켓이 먼저 닫혀버리는 상황이 발생 할 수 있다.
-> 데이터 소멸 위험
따라서 이를 해결하기 위해서는 half-close, 즉 한 방향의 스트림만을 종료시키는 과정이 필요하다.
*Stream?
소켓을 통해 두 호스트가 연결되면 그 다음부터는 상호간의 데이터 송수신이 가능한 상태가 됨
-> 스트림이 형성된 상태
연결 종료 시에 위 그림처럼 생성된 입출력 스트림 중 하나만 연결을 끊는 것을 half-close라고 한다.
Half-close가 필요한 이유
- 서버가 보낸 데이터를 전부 수신 완료했다는 메시지를 클라이언트가 보내야 하는 경우
-> 파일 데이터가 전부 전송이 되면 마지막에 포함된 EOF (end of file)를 읽어 들인다. / 클라이언트에서 보낸 수신 완료 메시지를 받은 서버에서 소켓을 종료
출력이 완료 되면 먼저 출력 스트림만 종료 시키고 클라이언트의 수신완료 메시지는 입력 스트림을 통해 받을 수 있게 열어 두는 것
= Half-close
728x90
반응형
'Golang > etc' 카테고리의 다른 글
tcp/ip - 09 소켓 옵션 (0) | 2022.07.06 |
---|---|
tcp/ip -08 DNS (0) | 2022.07.06 |
golang udp example (0) | 2022.07.03 |
tcp/ip 05 (0) | 2022.07.03 |
tcp/ip 04 (0) | 2022.06.28 |