Как мне отправить RST вместо нормального закрытия для тестирования? - PullRequest
4 голосов
/ 14 июля 2010

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

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

1 Ответ

5 голосов
/ 14 июля 2010

Вы можете получить 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...