UDP发送从不失败
UDP sendto never fails
我的应用程序连续向不同的主机发送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套接字发送,在这种情况下,您可能在随后的发送中获得错误。
相关文章:
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 模板参数推导失败,函数参数/参数不匹配
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- std::ifstream::read 不会读取所有 512 字节,并设置 EOF 和失败位
- NodeJs 服务器充斥着 UDP 广播,不发送响应
- 如何让谷歌测试正常运行。测试总是失败。(它不会编译)
- MS 本机单元测试 - 断言::线程失败不起作用
- 在 Linux 中关闭 UDP 套接字后,recv 不会返回
- 图片不显示,关闭时出错 --> 调试断言失败!表达式:is_block_type_valid(标头>_block_use)
- 要求子句中不允许哪些替换失败?
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- 将数据发送到多个客户端 UDP 时不支持地址族
- 失败,出现错误 87:参数不正确.如何判断哪个参数不正确?
- "acceptor"在从TCP迁移到UDP时不是"boost::asio::ip::udp
- ostream_iterator运算符=在pair<int,int>上失败,但在包装器类上工作。我不能为成对<>重载运算符<<吗?
- Xcode OSX上的C++构建失败,出现多个错误文件IO..不可用:在macOS 10.15中引入
- CMake + Qt,moc 编译失败,无法实现 QMetaObject 方法(编译器找不到基本 ui 对象的标头?
- 为什么关闭初始程序后在ncat上看不到UDP?
- 对于循环不递增或循环不失败测试
- poll() 似乎看不到 UDP 套接字上的事件