CSocket не получает OnClose или OnReceive при отключении сетевого подключения на стороне клиента - PullRequest
0 голосов
/ 15 декабря 2009

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

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

Обновление: я только что проверил и увидел, что клиент также не получил OnClose! Я отключил интернет-соединение на окнах, на которых работает клиент!

1 Ответ

1 голос
/ 15 декабря 2009

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

...