LINUX.ORG.RU

EPOLLHUP сразу после подключения

 


0

1

Пишу сервер на epoll, провожу тестирование.

Типа у нас http. Запускаю сервер и в браузере зажимаю F5. И страница начинает обновлятся с неистовой скоростью.

В результате после нескольких сотен (наверное, я не считал) обновлений ВСЕ подключения вылетают с EPOLLHUP. Т.е. подключился, далее делаю epoll_wait и получаю EPOLLHUP.

Как такое поведение объяснить можно?

1) Специальный механизм защиты такой 2) Кривой браузер (Firefox 24.5) 3) Кривой рук (тогда что исправить надо?)

Спасибо за ответы

Ответ на: комментарий от quest

Вот же идиото я. Проверяю errno, и туплю - что же случилось.

#define EBADF 9 /* Bad file number */

Вот что там приходит.

facelift
() автор топика
Ответ на: комментарий от facelift

lsof говорит что он слушает. Что еще это может быть?

EBADF The epfd file descriptor is not a valid file descriptor.

Но epoll_wait отрабатывает без ошибки

facelift
() автор топика
Последнее исправление: facelift (всего исправлений: 1)

Когда происходит соединение на твой серверный порт, FF создает клиентский порт, на который затем получает ответ. Типа рандом он выбирает. Так вот, эти порты не освобождаются по несколько секунд, что бы кто-то не мог по сети чужие данные прочитать, которые могут ВНЕЗАПНО долететь, если что-то тупит. Называется это TCP_WAIT. Смотри тут - http://www.microhowto.info/howto/listen_on_a_tcp_port_with_connections_in_the... и тут https://tools.ietf.org/html/rfc1337 и тут http://stackoverflow.com/questions/337115/setting-time-wait-tcp. Так что просто кончаются исходящие порты. ВСЕ. Можно отключить опцией в ядре и в proc вроде бы. Хоть убей, не помню какой.

Добавлено: ЕЩе вот тут смотри http://superuser.com/questions/173535/what-are-close-wait-and-time-wait-states. И да, я обдолбался, на самом деле это TIME_WAIT называется.

DiKeert ★★
()
Последнее исправление: DiKeert (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.