클라이언트 측에서 네트워크 연결을 비활성화 할 때 CSocket은 OnClose 또는 OnReceive를 수신하지 않습니다.

StackOverflow https://stackoverflow.com/questions/1908634

  •  19-09-2019
  •  | 
  •  

문제

C ++ CSocket을 사용하여 클라이언트 서버 응용 프로그램을 만들었습니다. 클라이언트를 서버에 연결 한 후 일반 X 버튼으로 클라이언트를 닫거나 TaskManager로 작업을 종료하면 Server Csocket은 OnClose 이벤트를 수신합니다. 문제는 클라이언트가 실행중인 Windows에서 인터넷 연결을 비활성화 할 때 Server Csocket이 OnClose 또는 OnReceive 이벤트를 수신하지 않습니다!

무슨 일이 일어나고 있는지 아는 사람이 있습니까?

업데이트 : 방금 테스트했는데 클라이언트가 OnClose도받지 못한 것을 보았습니다! 클라이언트가 실행중인 Windows에서 인터넷 연결을 비활성화했습니다!

도움이 되었습니까?

해결책

클라이언트 측은 FIN 또는 RST를 통해 서버에 대한 연결을 닫을 수 없으며 종료됩니다. 서버가 클라이언트가 죽었다는 것을 감지하려면 보낼 데이터가 있어야하거나 (실패 할 것인지)주기적인 TCP KeepAlive 프로브를 보내야합니다. TCP_KEEPALIVE 소켓 옵션으로 설정할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top