Отследить отключение клиента sys/socket.h

Как мне отследить отключение клиентского сокета, если он не вызвал функцию close(не закрыл соединение), а просто отключился, например, из-за потери интернета?

Я циклично вызываю функцию recv, и, если клиентский сокет закрыл соединение, то возвращается ноль. Но что делать, если у клиента просто пропало соединение? Можно ли сделать так, чтобы функция recv/read вернула значение(-1) при потере соединения? Если что, она просто не завершается.

Я пробовал настраивать опцию SO_RCVTIMEO, но она влияет не только на recv/read, но и на accept. Ещё думал создавать отдельный поток, но не уверен, что это правильно.

Спасибо за любую помощь.


Ответы (1 шт):

Автор решения: avp

Вызывайте setsockopt с SO_RCVTIMEO для сокета, получаемого из accept.

Или используйте poll/select с таймаутом и сами запоминайте время последней активности для каждого сокета.

→ Ссылка