1

当关闭与客户端的 TCP 连接时,客户端应用程序只会在连接重置时(发送 RST 数据包)以可见的方式响应用户。目前,我无法修改客户端应用程序。

在研究这个时,这样做的主要方法是打开 SO_LINGER,逗留时间为 0。但是,我注意到套接字按预期关闭(例如,在系统默认时间不停留在 TIME_WAIT),但不发送一个 RST 数据包到客户端。

我已经在 WSL2 和 Ubuntu(作为它自己的 VM,而不是 WSL 的一部分)中对此进行了测试,并且两者都没有发送预期的数据包。

服务器套接字(listen()s 的那个)打开了 SO_REUSEADDR 选项,客户端套接字(那个accept()ed)正确设置了 SO_LINGER 选项,以及 TCP_NODELAY 设置。

需要注意的是,服务器为每个接受的套接字创建一个线程。我不确定这是否会影响问题。我还尝试了其他人在其他问题中发布的一些解决方案,但似乎都没有奏效。

我偶尔会看到在执行几次服务器后发送wireshark RST(当我更新代码等时),但是当它们关闭或进程终止时它们不会立即发送。

上面列出的任何事实是否可能是未发送 RST 数据包的原因,或者是否有需要更改的 linux 系统选项?

提前致谢。让我知道是否需要更多详细信息。

4

0 回答 0