UDP发送从不失败

UDP sendto never fails

本文关键字:不失败 UDP      更新时间:2023-10-16

我的应用程序连续向不同的主机发送UDP报文。当主机处于活动状态时,UDP报文到达主机,sendto函数返回发送给主机的字节数。但是当主机宕机(电缆拔掉或复位)时,sendto函数不发送UDP数据包,但仍然返回缓冲区中的字节数。不再发送UDP报文,而是发送ARP报文来查找主机。为什么sendto函数不返回SOCKET_ERROR?WSAGetLastError函数也返回0。我怎么能注意到错误发送UDP数据包到不可达的主机?

注:我的操作系统是windows 7 x64,我的应用程序是本地c++和64位。

你的问题的标题- "UDP发送永不失败" -是一个很好的UDP的一行总结。

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

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

如果你想要一个可靠的协议,UDP不是你要找的。

UDP sendto()不可能返回这种性质的错误,除非您通过连接的UDP套接字发送,在这种情况下,您可能在随后的发送中获得错误。