如何发送RST而不是正常关闭进行测试?

Har*_*d L 4 language-agnostic unix networking unit-testing tcp

当通过RST标志关闭TCP连接而不是用于关闭连接的正常握手时,我有一些代码似乎无法很好地处理它."通过同行重置连接"的情况.我想编写一个总是通过RST关闭的TCP服务器,以便我可以重现该错误并为此编写一些单元测试.所以...

如何发送RST而不是正常关闭进行测试?

R S*_*hko 5

您可以通过修改SO_LINGER设置来获得RST.您希望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);
Run Code Online (Sandbox Code Playgroud)