2011-12-26 1 views
2

Я создаю неблокирующий сокет, а затем используйте epoll для управления сокетом. Я не устанавливаю таймаут на epoll_wait. Но я нахожу, что epoll вернулись с 5 до 10 секунд, затем я проверил с getsockopt по адресу SO_ERROR, время ожидания подключения. Почему тайм-аут за столь короткое время?Почему epoll_wait(), получить возврат и время соединения TCP в 5s ~ 10s

Я пытаюсь использовать инструменты для ограничения пакетов TCP. Сценарий выглядит следующим образом:

Когда мой клиент отправляет SYN для подключения к серверу. Но сервер не может отправить обратно ACK с 5 до 10 секунд. Затем возвращается epoll_wait. и проверьте с помощью SO_ERROR. Я получаю EIMTEDOUT.

Я просто не могу понять, почему тайм-аут так короток с 5 до 10 секунд. Является ли проблема моего клиента или является epoll?

+0

+1 - 5-10 секунд действительно очень короткий для таймаута соединения. Например, если ссылка содержит модем коммутируемого доступа, соединение всегда будет терпеть неудачу с таким коротким таймаутом. Я хотел бы знать, почему это происходит. –

+0

Я не знаю, почему. Я просто использую libev. описание выше - это именно то, что делает libev на C++. Я просто нахожу, что libev возвращает ETIMEDOUT за столь короткое время. – hyman

ответ

0

Недавно я опубликовал аналогичный question. См. Принятый ответ, в котором объясняется, как значение тайм-аута соединения TCP рассчитывается ядром linux. Если у вас есть клиент/сервер на одном компьютере, он, скорее всего, будет иметь более короткий таймаут значения. Если вы ожидаете, что сервер займет больше времени, чтобы принять соединение, вы можете явно указать значение тайм-аута.

+0

Спасибо. Я справился с этим. В качестве вашего вопроса значение таймаута TCP вычисляется динамически ядром. – hyman

 Смежные вопросы

  • Нет связанных вопросов^_^