Отследить отключение клиента sys/socket.h
Как мне отследить отключение клиентского сокета, если он не вызвал функцию close(не закрыл соединение), а просто отключился, например, из-за потери интернета?
Я циклично вызываю функцию recv, и, если клиентский сокет закрыл соединение, то возвращается ноль. Но что делать, если у клиента просто пропало соединение? Можно ли сделать так, чтобы функция recv/read вернула значение(-1) при потере соединения? Если что, она просто не завершается.
Я пробовал настраивать опцию SO_RCVTIMEO, но она влияет не только на recv/read, но и на accept. Ещё думал создавать отдельный поток, но не уверен, что это правильно.
Спасибо за любую помощь.
Ответы (1 шт):
Вызывайте setsockopt с SO_RCVTIMEO для сокета, получаемого из accept.
Или используйте poll/select с таймаутом и сами запоминайте время последней активности для каждого сокета.