epoll лучший способ обнаружения отключения пользователя
Я работаю над сетевым программированием с использованием epoll. Мне было интересно, как лучше всего обнаружить отключение пользователя. Прямо сейчас я использую select with timeout, чтобы увидеть, есть ли сигнал в буфере приема, и нет ли сигнала в течение определенного времени, а затем он закрывает соединение сокета.
Я думаю, что может быть что-то другое, более подходящее для epoll вместо использования select.
Заранее благодарю..
2 ответа:
Я думаю, что может быть что-то еще более подходящее для epoll вместо использования select.
Нет, не существует. Если вам нужно найти неактивного или мертвого клиента, вы должны сделать это сами. (например, отправьте им какую-то форму сообщений о сердцебиении и посмотрите, ответят ли они/ошибка в течение тайм-аута, или сделайте то, что вы уже делаете, и тайм-аут после периоида бездействия.)
Вы все еще можете использовать epoll и использовать аргумент timeout в epoll_wait для обнаружения таймаута.
Если у вас есть сеанс TCP и вы хотите обнаружить, когда удаленный узел закрывает соединение, вы регистрируете для получения события
EPOLLRDHUP
, или вы можете обнаружить его, получивerrno == EAGAIN
при получении событияEPOLLIN
и попытавшись прочитать (не блокируя) из закрытого сокета.