UDP套接字无法接收ECONNREFUSED

时间:2011-04-23 06:14:15

标签: c udp winsock icmp

我使用socket创建了一个套接字(AF_INET,SOCK_DGRAM,IPPROTO_UDP)。

根据this,如果我多次发送简单数据包(乘以send()和/或sendto()),我可以获得ECONNREFUSED。 ICMP应该告诉先前的数据包没有到达并且应该出现ECONNREFUSED。但它失败了,errno没有报告任何错误,send()总是返回发送的字节数。

UDP协议实际上不应该告诉数据包已发送。但是ICMP可以根据我的理解提供建议。

所以,问题是 - 为什么它没有收到ECONNREFUSED?

一切都是使用Winsock完成的。

2 个答案:

答案 0 :(得分:1)

这可能有两个原因。

  • 目标计算机没有(出于某种原因)发送ICMP返回
  • 目标计算机 发送ICMPwinsock无法正确解释它(我知道某些较旧的Unix会这样做)

简而言之,您最好的选择是使用嗅探器。尝试使用wireshark,看看你是否得到了ICMP。

答案 1 :(得分:0)

INFO: Winsock Ignores ICMP Port Unreachable Control Messages

您必须通过SIO_UDP_CONNRESET启用WSAIoctl()控件,以便UDP套接字对ICMP故障作出反应:

WinSock Recvfrom() now returns WSAECONNRESET instead of blocking or timing out