Сокеты BSD UNIX C TCP_KEEPALIVE как проверить, помечен ли сокет как сломанный - PullRequest
0 голосов
/ 15 сентября 2010

Я пытался реализовать параметр TCP_KEEPALIVE для сокета сервера C, и я не могу понять, как проверить, помечен ли сокет как сломанный.Я следовал этому руководству по настройке сокета для поддержки активности, но там говорится: «Если ответ ACK не получен в течение девяти последовательных раз, соединение помечается как разорванное».У меня вопрос, как узнать, что сокет помечен как сломанный?

Учебное пособие: http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/

Ответы [ 2 ]

2 голосов
/ 15 сентября 2010

чтение () из сокета.

read вернет -1, если сокет был сломан.

1 голос
/ 15 сентября 2010

Если ядро ​​решит, что соединение разорвано, вы получите сообщение об ошибке при попытке отправки или получения из сокета. Вы уже должны выполнять соответствующую обработку ошибок при отправке и получении, чтобы обработать «нормальный» случай, когда ваш партнер самопроизвольно разрывает соединение Таким образом, «лишний» код обработки ошибок не требуется.

...