Half-close

일방적인 close()의 문제점

A 호스트와 B 호스트가 서로 TCP 통신하고 있다.

A 호스트가 일방적으로 close()로 연결을 종료하면 B 호스트는 A 호스트로 데이터를 보낼게 있어도 보낼 수 없다.

따라서 일방적으로 송수신 스트림을 끊어버리는 것은 문제가 있으므로, 하나의 스트림(주로 송신을 닫고 수신을 열어둠)만 닫는 것을 Half-close 기법이라고 한다.

Half-close가 필요한 이유

서버는 단순히 데이터를 연속해서 저장하면 되는데, 클라이언트는 언제까지 데이터를 수신해야 하는지 알 수 없다.

주기적으로 read() 함수를 호출하다가는 블로킹 상태에 빠질 수 있다.

그러므로 데이터 전송이 끝났음을 알리는 EOF를 날리면 된다.

하지만 close()를 통해 EOF를 날리면 이후 혹시 모를 데이터를 수신할 수 없으므로, 출력 스트림만 닫아서 EOF를 보내는 것이다.

Reference

https://sjh836.tistory.com/46



© 2022. by minkuk

Powered by minkuk