我的应用程序不断地向不同的主机发送 UDP 数据包。当主机处于事件状态时,UDP 数据包到达主机,sendto
函数返回发送给它的字节数。但是当主机出现故障(电缆拔出或重置)时,sendto
函数不会发送 UDP 数据包,但仍会返回缓冲区中的字节数。发送 ARP 数据包而不是发送 UDP 数据包来查找主机。为什么 sendto
函数不返回 SOCKET_ERROR? WSAGetLastError
函数也返回 0。我如何注意到向无法访问的主机发送 UDP 数据包时出错?
附言我的操作系统是 Winodws 7 x64,我的应用程序是 native C++ 和 64 位。
最佳答案
你的问题的标题 - “UDP sendto never fails” - 是对 UDP 的一个很好的单行总结。
这就是 UDP 的工作方式——UDP 不关心目的地是否可达。
UDP sendto
当数据包离开您的应用程序时“成功”;就 UDP 而言,它甚至不需要离开您的计算机。
ARP 包是您的计算机尝试找到到达主机的方法,但此时 sendto
已经“成功”了。
如果您想要一个可靠的协议(protocol),UDP 不是您要找的。p>
关于c++ - UDP 发送永远不会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33208263/