c# - 将 RST 数据包作为正常连接终止处理
问题描述
我有一个正在侦听和使用 TCP 消息的服务。我最近遇到了一个发送 TCP 消息的设备,但它不是以常规方式结束连接,例如使用 FIN,而是总是使用 RST 结束连接,在我这端,这被视为远程主机中止的连接和套接字队列不见了。
在我的研究中,我遇到了关于这是否有效/可接受的不同意见,并且已经看到一些结论表明应用程序需要开始通过 RST 而不是 FIN(或两者)接受终止。
我的问题是,怎么做?一旦客户端将 RST 数据包发送到我的服务器,我就会收到 winsock 错误 10054,说明连接已被远程主机中止。在我的应用程序级别,我看不到对它有任何控制,因为我当时只是收到错误消息。
这会导致两种可能的间歇性结果,具体取决于时间: - 处理队列中的数据,然后断开连接。- 在数据可以被处理之前连接被断开并且它丢失了。
因此,我正在尽我所能防止这些 RST 数据包被视为中止,并能够始终如一地处理队列中的数据。
解决方案
推荐阅读
- reactjs - 为什么不允许在 React 中返回多个元素?
- javascript - Angular Js/Javascript 执行一个函数,直到数组的所有内容都被使用
- algorithm - 硬编码值来自散列/压缩/编码算法
- vb.net - 进度条总和值不正确
- python-3.x - 如何使用 matplotlib 在球体上绘制具有给定坐标的 3D 体素
- django - 将 easy_thumbnails 与 Amazon S3 结合使用时,如何修复执行 4 个额外查询的页面?
- drupal - 使用 Form API 将标签元素添加到 managed_file 字段
- docker - 如何为多个 docker 容器使用相同的 python 映像?
- angular - 如何将任何类型的数组传递给查找
- javascript - 如何在 Meteor.js 的 React 组件中导入 CSS