2011-04-23 157 views
1

我使用socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)創建了一個套接字。UDP套接字無法接收ECONNREFUSED

根據this,如果我多次發送簡單的數據包(乘以send()和/或sendto()),我可以得到ECONNREFUSED。 ICMP應該知道前一個數據包沒有到達,ECONNREFUSED應該出現。但它失敗,errno不報告任何錯誤,並且send()始終返回發送的字節數。

UDP協議實際上不應該知道數據包已發送。但ICMP可以根據我的理解提供建議。

所以,問題是 - 爲什麼它無法接收ECONNREFUSED?

一切都使用Winsock完成。

+0

你調用connect()在你的UDP套接字? – nos 2011-04-23 22:19:02

回答

1

可能有兩個原因。

  • 目標機器沒有(因爲某些原因)發送ICMP
  • 目標機器發送ICMP回來,但winsock不能正確地解釋它(我知道,某些舊的Unix系統這樣做)

總之,你最好打賭找出將使用嗅探器。試試wireshark,看看你是否收到ICMP。

+0

謝謝你的回答。系統是winxp,本地機器。 ICMP只是假設,可能是別的 – naixx 2011-04-23 07:09:21