TCP 소켓 종료 처리
TCP는 연결형이라 안정적으로 보이지만 실제 코드는 부분 읽기, 지연, 연결 종료, 재시도 같은 상태를 반드시 다뤄야 합니다.
대기
서버는 backlog와 포트 충돌을 확인하며 연결 요청을 받습니다.
수락
요청마다 새 소켓이 생기고 클라이언트별 상태를 따로 관리합니다.
바이트 흐름
한 번 보낸 메시지가 한 번의 read로 온다고 가정하지 않습니다.
종료
정상 종료, reset, half-close를 로그와 상태로 구분합니다.
메시지 길이 또는 구분자를 정해 바이트 흐름을 메시지로 복원합니다.
연결은 됐지만 데이터가 안 오는 상황을 타임아웃으로 분리합니다.
부분 수신과 상대 종료를 처리할 수 있으면 TCP 코드의 완성도가 높아집니다.