首页 > 解决方案 > 将 RST 数据包作为正常连接终止处理

问题描述

我有一个正在侦听和使用 TCP 消息的服务。我最近遇到了一个发送 TCP 消息的设备,但它不是以常规方式结束连接,例如使用 FIN,而是总是使用 RST 结束连接,在我这端,这被视为远程主机中止的连接和套接字队列不见了。

在我的研究中,我遇到了关于这是否有效/可接受的不同意见,并且已经看到一些结论表明应用程序需要开始通过 RST 而不是 FIN(或两者)接受终止。

我的问题是,怎么做?一旦客户端将 RST 数据包发送到我的服务器,我就会收到 winsock 错误 10054,说明连接已被远程主机中止。在我的应用程序级别,我看不到对它有任何控制,因为我当时只是收到错误消息。

这会导致两种可能的间歇性结果,具体取决于时间: - 处理队列中的数据,然后断开连接。- 在数据可以被处理之前连接被断开并且它丢失了。

因此,我正在尽我所能防止这些 RST 数据包被视为中止,并能够始终如一地处理队列中的数据。

标签: c#.netnetworkingtcp

解决方案


推荐阅读