У меня есть приложение, которое, когда оно имеет данные для передачи, использует epoll, чтобы узнать, может ли данный TCP-сокет быть записан.Имеет ли epoll экспоненциальный откат?
То, что я наблюдаю, заключается в том, что по мере того как дальний конец TCP-соединения отстает, и буфер отправки сокета TCP начинает заполняться, частота, с которой epoll возвращает событие EPOLLOUT, испытывает экспоненциальное отсрочку. Такое поведение происходит до получения EAGAIN из записи сокета.
Приложение использует EPOLLONESHOT и делает вызов EPOLL_CTL_MOD для повторного включения события EPOLLOUT после каждого события. Но, как я уже отмечал выше, каждое последующее появление экспоненциально позже (у меня было прогрессирование 40 мс, 80 мс, 160 мс, 320 мс, 640 мс, 1280 мс и т. Д.) Вплоть до EAGAIN.
Это недокументированная особенность эпохи? Может ли он быть отключен? Это проблема, потому что данные становятся устаревшими, и я предпочел бы отказаться от нее, а не отправлять ее позже.
Заранее спасибо.
Если устаревшие данные являются проблемой, используйте UDP, а не TCP; поэтому были изобретены два протокола. – msw