CSocket не получает OnClose или onReceive при отключении сетевого подключения на стороне клиента

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

  •  19-09-2019
  •  | 
  •  

Вопрос

Я создал клиент-серверное приложение с помощью c ++ CSocket.когда я подключаю клиент к серверу и после этого закрываю клиент обычной кнопкой X или завершаю выполнение задачи с помощью taskmanager , сервер CSocket получает событие OnClose.Проблема в том, что когда я отключаю подключение к Интернету в Windows, на которой запущен клиент, сервер CSocket не получает событие OnClose или onReceive!

Кто-нибудь, возможно, знает, что происходит?

Обновить:Я только что протестировал и увидел, что клиент тоже не получил OnClose!Я отключил подключение к Интернету в Windows, на которой запущен клиент!

Это было полезно?

Решение

Клиентская сторона завершает работу без возможности закрыть соединение с сервером через FIN или RST.Чтобы сервер обнаружил, что клиент мертв, у него должны быть либо данные для отправки (что приведет к сбою), либо он должен периодически отправлять запросы TCP keepalive. TCP_KEEPALIVE может быть установлен в качестве опции сокета.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top