Я делаю небольшую программу, и я пытаюсь обработать клиентское соединение. Когда клиент отключается, он отправляет сообщение об отключении, и я обрабатываю это. Но когда клиент закрывается с силой (сетевое соединение потеряно, задача убита, исключение ..) Сервер все еще видит клиента как подключенного. Теперь я пытаюсь немедленно обновить эту информацию, после того как клиент больше не подключен, его следует удалить. Я не могу просто пинговать его время от времени, не так ли? Что делать, если есть передача, и я вмешиваюсь в команду ping?C# Socket - Как проверить, отключен ли клиент?
TL; DRHow я знаю, если мой клиент больше не подключен?
TCP является _designed_, чтобы предотвратить обнаружение многих типов разъединения. Помимо изящного закрытия, только если удаленная конечная точка принудительно закрыла сокет, вы получите сообщение об ошибке, и даже тогда, если у вас есть чтение в ожидании на сокете. В противном случае ошибки не будут обнаружены, если вы не напишете в сокет. Обратите внимание, что TCP включает опцию «keep-alive», которая периодически будет записывать в сокет, и поэтому может выполнять это автоматически. Обратите также внимание на то, что попытка обнаружения отключений, как правило, является плохой идеей **, поскольку она отрицает всю точку отказоустойчивости TCP. –
См. Отмеченный дубликат для более подробного обсуждения вопроса. –