我假设 udp 连接并不真正关心另一边是否有任何对等端,所以为什么可以 boost asio udp 连接在 socket->send( boost::asio::buffer( data.get(), length ) );
调用(我从 Linux 发送到 Windows,只发送不尝试读取任何东西)?是网卡错误还是什么?
最佳答案
Boost.Asio 抛出值为 boost::asio::error::connection_refused
的错误,因为底层套接字的 send*()
操作正在返回一个ECONNREFUSED
的错误代码。根据 udp手册页,send*()
函数允许返回 ECONNREFUSED
:
All errors documented for socket or ip may be returned by a send or receive on a UDP socket.
ECONNREFUSED
No receiver was associated with the destination address. This might be caused by a previous packet sent over the socket.
虽然在无连接协议(protocol)上收到与连接相关的错误可能很奇怪,但仍允许该服务返回检测到的错误。协议(protocol)的不可靠部分阻止调用者接收到消息已被目的地接收的确认。但是,这并不排除服务在知道目标未收到消息的情况下报告连接被拒绝错误。
关于c++ - 为什么可以 boost asio udp 连接抛出 "send: Connection refused"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21722900/