2009-06-19 95 views
11

我们有一个.NET 2.0桌面应用程序,它通过UDP发送和接收网络 数据包。UDP套接字上的套接字错误10052

几个用户报告偶尔的套接字错误10052,当代码在UDP套接字上调用socket.BeginReceiveFrom时发生 。

这是什么意思?

套接字错误10052官方MS文档说 - 报价: “WSAENETRESET(10052)网络断开了复位连接的连接 已被打破,由于保持活动检测到故障而 操作正在进行。如果尝试在已经有 失败的连接上尝试设置SO_KEEPALIVE,则也可以通过setsockopt返回。“

这对UDP套接字没什么意义,因为UDP是 无连接协议。

我知道,与UDP套接字 连接彼此紧密错误代码10054意味着,ICMP消息“端口不可达”收到了,我 想,如果可能10052映射到另一个ICMP消息?

我已经搜索了几个月,阅读网络书籍等,但无法找到 什么。 请帮忙 - UDP套接字上的套接字错误10052是什么意思?

在此先感谢

回答

2

WSAE NET RESET表明,它发生是由于网络接口本身的复位。你的程序坐在那里绑定一个UDP端口,所以从某种意义上说,它连接,但是连接到网络接口而不是远程对等体。

尝试启动您的程序,将其启动到即将进行此BeginReceiveFrom调用的位置,然后在设备管理器中禁用您的NIC并重新启用它。或者,使用Wi-Fi,丢弃并重新建立与WAP的连接。它甚至可能会通过将以太网电缆拔下到您的计算机上而发生,因为最新版本的Windows默认会在发生这种情况时,通过该NIC来终止所有连接。

这将解释来自现场的罕见问题报告。这可能只发生在硬件级别存在本地网络故障时。

7

请参阅http://msdn.microsoft.com/en-us/library/ms740120%28v=vs.85%29.aspx,其中描述了recvfrom函数。它说WSAENETRESET(它是winsock错误10052):

对于数据报套接字,此错误指示生存时间已过期。

+2

这是UDP实现往往无用地报告给应用程序的许多错误之一。你几乎不得不忽视它们。 – 2012-05-18 10:16:36

3

发送UDP数据报时,请确保TTL值足够高。

如果您使用的是UdpClient类。 发送数据报之前然后使用以下:

myUdpClient.Ttl = 255; 

注:255是TTL的最大值。 如果该值不够,则会出现一些网络问题。