Winsock错误10054(WSAECONNRESET)"正常"与UDP到/来自localhost?

oma*_*tai 7 udp winsock

"在单个Windows PC上使用UDP进行进程间通信可能会出现什么问题?" 我想......然后继续实施它.

但是尽管只发送了几百个字节并且只是非常偶发,并且尽管UDP被用作无连接协议(使用的sendto()功能),但我仍然被随机出现的错误10054 - "连接重置"所困扰.我觉得这很混乱.是吗:

  • 完全正常,可以预料,在这种情况下......这意味着什么?
  • 完全出乎意料,我可能实施了一些错误
  • 完全出乎意料,所以我应该检查是否有冲突的软件(例如对于这样的问题)
  • 别的什么?

我在某处读到它可能表明在另一端没有接收端口打开......但这对我来说更没意义 - 不是UDP只是假设发送数据报而不关心它发生了什么?或者在同一台机器(localhost)上的端口发送/从某些机器上的端口发送一些特殊情况?

Cam*_*ron 1

在我的具体情况下,我有一个在本地主机上运行的服务器,侦听绑定到特定端口的 UDP 套接字。它还具有绑定到同一端口的第二个 UDP 套接字(在上下文中有意义),仅用于发送对第一个套接字上收到的数据包的响应。

同样在本地主机上运行的客户端将创建一个临时套接字,向服务器发送一个数据包,等待响应,然后关闭其套接字。客户端的超时时间非常短(出于应用程序特定的原因),如果初始尝试超时,则会重试。

有时会发生这样的情况:客户端向服务器发送数据包,在发送响应之前超时,然后关闭其套接字。然后,服务器将(在侦听套接字上)接收来自客户端的数据包,并(在发送套接字上)发回响应。然而,Windows“有帮助地”发回 ICMP 响应,表明不再有任何套接字在目标端口上侦听。至关重要的是,该数据包最终被传递到侦听套接字,而不是发送到发送套接字(因为它们共享相同的端口)。下次从服务器上的侦听套接字读取时,会收到一个WSAECONNRESET错误,指示它发送的前一个数据包(实际上是从不同的套接字发送的)未能传递。

就我而言,修复方法只是忽略WSAECONNRESET侦听套接字上的错误。发生此类错误后,侦听套接字继续成功接收其他数据包,而发送套接字在数据包发送失败后继续成功发送数据包。