Как отправить RST вместо обычного закрытия для тестирования?

У меня есть код, который, похоже, плохо справляется с закрытием TCP-соединения с помощью флага RST вместо обычного рукопожатия для закрытия соединения. Ситуация «сброс соединения пиром». Я хотел бы написать TCP-сервер, который всегда закрывается через RST, чтобы я мог воспроизвести ошибку и написать для этого несколько модульных тестов. Так...

Как отправить RST вместо обычного закрытия для тестирования?


person Harold L    schedule 14.07.2010    source источник


Ответы (1)


Вы можете получить RST, изменив настройку SO_LINGER. Вы хотите, чтобы для l_onoff было установлено ненулевое значение, а для l_linger — ноль. Как только вы это сделаете, закрытие сокета вызовет сброс.

struct linger lng;
lng.l_onoff = 1;
lng.l_linger = 0;
setsockopt(sock, SOL_SOCKET, SO_LINGER, &lng, sizeof(lng));
close(sock);
person R Samuel Klatchko    schedule 14.07.2010
comment
Некоторое объяснение: developerweb.net/forum/archive/index.php /t-2982.html - person Nikolai Fetissov; 14.07.2010
comment
Спасибо, и FWIW эквивалент Java socket.setSoLinger(true, 0); - person Harold L; 15.07.2010