예전에 개발하여 납품한 장비에 있는 코드가 문제가 있는 것 같습니다.
구조는 TCP 또는 SSL 세션을 연결했다가 데이터를 송수신하고 연결을 끊는... 극히 단순한 구조인데요...
문제는 서버가 먼저 세션을 종료해야 합니다. 논블럭 소켓으로 구현했고요.
서버의 종료절차가
shutdown (fd, SHUT_WR);
nbyte = read(fd, ...);
if (nbyte == 0) close (fd);
이렇게 구성되어 있습니다. 서버가 먼저 종료절차를 시작하기 위해 shutdown()을 호출해서 FIN을 client로 보내고요, client는 ACK를 전송하고, close() 호출하여 역시 FIN을 보냅니다. 거기에 서버가 다시 ACK를 내보내 정상적을 종료가 됩니다.
그런데, 이 서버가 TCP 세션 뿐만 아니라 TLS 세션도 허용하고 있는데요.. 역시 종료절차는