c++ - UDP 发送永远不会失败

标签 c++ sockets winapi network-programming

我的应用程序不断地向不同的主机发送 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 不是您要找的。

关于c++ - UDP 发送永远不会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33208263/

相关文章:

c++ - 在 Windows 中加速 printf 和 cout

C++11 标准与 CUDA 6.0

c++ - <Winsock.h> 中是否有等效的 MSG_MORE?

c++ - CAN 套接字读取帧延迟

C++ 简单 Hook 和隐藏命令提示符

c++ - 我的菱形继承(钻石问题)编译器错误无法解决?

c++ - 您可以在引用该类内部函数的类中初始化线程吗?

java - 我应该在 Android 中使用 AsyncTask 来管理套接字连接吗?

c++ RegSetValueEx 在注册表中只设置一个字符值

c++ - 在Windows中通过串口写入二进制数据