epoll лучший способ обнаружения отключения пользователя


Я работаю над сетевым программированием с использованием epoll. Мне было интересно, как лучше всего обнаружить отключение пользователя. Прямо сейчас я использую select with timeout, чтобы увидеть, есть ли сигнал в буфере приема, и нет ли сигнала в течение определенного времени, а затем он закрывает соединение сокета.

Я думаю, что может быть что-то другое, более подходящее для epoll вместо использования select.

Заранее благодарю..

2 3

2 ответа:

Я думаю, что может быть что-то еще более подходящее для epoll вместо использования select.

Нет, не существует. Если вам нужно найти неактивного или мертвого клиента, вы должны сделать это сами. (например, отправьте им какую-то форму сообщений о сердцебиении и посмотрите, ответят ли они/ошибка в течение тайм-аута, или сделайте то, что вы уже делаете, и тайм-аут после периоида бездействия.)

Вы все еще можете использовать epoll и использовать аргумент timeout в epoll_wait для обнаружения таймаута.

Если у вас есть сеанс TCP и вы хотите обнаружить, когда удаленный узел закрывает соединение, вы регистрируете для получения события EPOLLRDHUP, или вы можете обнаружить его, получив errno == EAGAIN при получении события EPOLLIN и попытавшись прочитать (не блокируя) из закрытого сокета.