Имитация тайм-аута повторной передачи HTTP / TCP - PullRequest
1 голос
/ 10 ноября 2009

Я работаю над Linux. У меня есть HTTP-клиент, который запрашивает некоторые данные с HTTP-сервера. HTTP-клиент написан на C, а HTTP-сервер написан на Perl. Я хочу смоделировать тайм-ауты повторной передачи TCP на стороне клиента.

Я предполагаю, что изящное закрытие сокета не приведет к повторной передаче запросов клиентом.

Итак, я попробовал следующий сценарий:

  1. Выйдите из сервера, как только он получит HTTP-запрос GET. Однако я заметил, что после выхода из приложения сокет по-прежнему закрывается изящно. Я вижу, что сервер инициирует сообщения FIN.ACK к клиенту, даже если приложение не вызвало "close" на сокете. Я заметил такое поведение на простом TCP-сервере и клиенте, написанном также на C-программе.

  2. Сервер не отправляет никакого ответа на GET-запрос клиента. В этом случае я замечаю, что все еще есть FIN, ACK, отправленный сервером. Похоже, что в этих случаях ОС (Linux) заботится о закрытии сокета с партнером. Есть ли способ подавить это поведение (используя параметры ioctl или setsockopt) или любой другой способ имитировать тайм-ауты повторной передачи TCP.

Ответы [ 2 ]

1 голос
/ 10 ноября 2009

Этот вопрос ранее обсуждался здесь

1 голос
/ 10 ноября 2009

Вы можете попытаться установить правила брандмауэра, которые блокируют пакеты, идущие от сервера к клиенту, что заставит клиента повторно передавать квесты. В Linux это, вероятно, будет сделано с использованием iptables, но разные дистрибутивы имеют разные методы управления им.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...