我有一个正在侦听和使用TCP消息的服务。我最近遇到了一种发送TCP消息的设备,但没有以常规方式结束连接,例如使用FIN时,它总是使用RST终止连接,在我这端,它被视为远程主机中止了的连接,并且套接字队列中的数据消失了。
在研究期间,我对这种说法是否有效/可以接受表示了不同的看法,并得出了一些结论,指出应用程序需要开始通过RST而不是FIN(或两者)开始接受终止。
我的问题是,如何?客户端将RST数据包发送到我的服务器后,我立即收到Winsock错误10054,指出该连接已被远程主机中止。在我的应用程序级别上,我看不到对此有任何控制权,因为那时候我刚刚得到错误。
这会导致两个可能的间歇结果,具体取决于时间: -处理队列中的数据,然后断开连接。 -必须先断开连接,然后才能处理数据并丢失数据。
因此,我正在尽我所能防止这些RST数据包被视为异常中止,并能够始终如一地处理队列中的数据。