Я работаю над Linux.
У меня есть HTTP-клиент, который запрашивает некоторые данные с HTTP-сервера. HTTP-клиент написан на C, а HTTP-сервер написан на Perl.
Я хочу смоделировать тайм-ауты повторной передачи TCP на стороне клиента.
Я предполагаю, что изящное закрытие сокета не приведет к повторной передаче запросов клиентом.
Итак, я попробовал следующий сценарий:
Выйдите из сервера, как только он получит HTTP-запрос GET. Однако я заметил, что после выхода из приложения сокет по-прежнему закрывается изящно. Я вижу, что сервер инициирует сообщения FIN.ACK к клиенту, даже если приложение не вызвало "close" на сокете. Я заметил такое поведение на простом TCP-сервере и клиенте, написанном также на C-программе.
Сервер не отправляет никакого ответа на GET-запрос клиента. В этом случае я замечаю, что все еще есть FIN, ACK, отправленный сервером.
Похоже, что в этих случаях ОС (Linux) заботится о закрытии сокета с партнером.
Есть ли способ подавить это поведение (используя параметры ioctl или setsockopt) или любой другой способ имитировать тайм-ауты повторной передачи TCP.