Как узнать, что клиент Socket был отключен? - PullRequest
2 голосов
/ 10 февраля 2011

Я занимаюсь кодированием в архитектуре Linux.У меня есть вопрос относительно сокет-сервера и клиента.Я сделал один пример кода, в котором сервер продолжает принимать соединение, а клиент подключен к серверу.если каким-то образом кто-то отключил сетевой кабель, поэтому я отключаю клиента (клиентский сокет отсоединен от ПК), а на стороне сервера соединение еще живо, потому что я не могу уведомить, что клиент отключен, потому что сеть отключена.Как я могу узнать, что клиент отключился?

Спасибо, Neel

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Вам необходимо либо настроить keepalive на сокете, либо отправить контрольное сообщение на уровне приложения, в противном случае прослушивающая сторона будет ждать в течение неопределенного времени, пока не поступят пакеты. Если вы управляете протоколом, пульс на уровне приложения может быть легче. Плюсом является то, что любое решение поможет поддерживать соединение между NAT-шлюзами в сети.

См. Ответ: Является ли TCP Keepalive единственным механизмом для определения неработающей ссылки?

Также см. Эту документацию по Linux: http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/#programming

0 голосов
/ 10 февраля 2011

SIGPIPE для локальных сокетов и eof on read для каждого типа сокетов.

...