Консультация № 65105
01.12.2006, 14:54
0.00 руб.
0 1 1
Здравствуйте эксперты.
Как узнать в сокет соединии отстался ли еще клиент на том конце или нет. При посылке ему сообшения функциями send или write если клиент уже отключился программа вываливается с ошибкой Broken pipe.
Пишу под FreeBSD.

Обсуждение

давно
Академик
20764
1861
01.12.2006, 15:27
общий
это ответ
Здравствуйте, Gray!

С broken pipe разговор короткий - signal (SIGPIPE, SIG_IGN)
Очередной write всё равно вернёт ошибку.

А узнать жив ли peer непросто. Если соединение tcp, можно через setsockopt() установить SO_KEEPALIVE. Только надо ещё таймауты подкрутить (естественно, не глобальные) так как по умолчанию получается около двух часов.
Форма ответа