2009-06-19 120 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的最大值。 如果該值不夠,則會出現一些網絡問題。