UDP sendto永远不会失败

Mus*_*lik 1 c++ sockets winapi network-programming

我的应用程序连续向不同的主机发送UDP数据包 当主机处于活动状态时,UDP数据包到达主机,sendto函数返回发送给它的字节数.但是当主机出现故障(电缆拔出或重置)时,sendto功能不会发送UDP数据包,但仍会返回缓冲区中的字节数.不会发送UDP数据包,而是发送ARP数据包以查找主机.为什么sendto函数不返回SOCKET_ERROR?WSAGetLastError函数也返回0.如何在向无法访问的主机发送UDP数据包时发现错误?

PS我的操作系统是Winodws 7 x64,我的应用程序是原生C++和64位.

mol*_*ilo 7

你的问题的标题 - "UDP sendto永远不会失败" - 是一个非常好的UDP一行摘要.

这就是UDP的工作方式 - UDP并不关心目的地是否可达.当数据包离开您的应用程序时,
UDP sendto"成功"; 就UDP而言,它甚至不需要离开您的计算机.

ARP包是您的计算机尝试找到到达主机的方法,但此时sendto已经"成功"了.

如果你想要一个可靠的协议,UDP就不是你想要的了.