epoll лучший способ обнаружить отключение пользователя - PullRequest
3 голосов
/ 22 июня 2011

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

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

Заранее спасибо ..

Ответы [ 2 ]

2 голосов
/ 29 ноября 2013

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

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

1 голос
/ 22 июня 2011

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

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

...