我认为udp连接并不关心另一方是否存在任何对等端,为什么可以在socket->send( boost::asio::buffer( data.get(), length ) );
调用时提升asio udp连接抛出“send:Connection refused”(我从Linux发送)到Windows,只发送不尝试读取任何东西)?这是一些网卡错误还是它可能是什么?
答案 0 :(得分:2)
使用send_to
。毕竟,UDP是一种无连接协议。
答案 1 :(得分:2)
Boost.Asio抛出一个值为boost::asio::error::connection_refused
的错误,因为底层套接字的send*()
操作返回的错误代码为ECONNREFUSED
。根据{{3}}手册页,send*()
函数可以返回ECONNREFUSED
:
udp或socket记录的所有错误都可能由UDP套接字上的发送或接收返回。
ECONNREFUSED
没有接收器与目标地址相关联。这可能是由通过套接字发送的先前数据包引起的。
虽然在无连接协议上接收与连接相关的错误可能很奇怪,但仍允许该服务返回检测到的错误。协议的不可靠部分阻止呼叫者接收到目的地接收到消息的确认。但是,如果服务知道目标没有收到消息,则不会阻止服务报告连接拒绝错误。