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

时间:2010-07-14 17:44:15

标签: unit-testing language-agnostic unix networking tcp

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

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

1 个答案:

答案 0 :(得分: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);