为什么可以提升asio udp连接抛出“send:Connection refused”?

时间:2014-02-12 08:53:45

标签: c++ exception boost udp boost-asio

我认为udp连接并不关心另一方是否存在任何对等端,为什么可以在socket->send( boost::asio::buffer( data.get(), length ) );调用时提升asio udp连接抛出“send:Connection refused”(我从Linux发送)到Windows,只发送不尝试读取任何东西)?这是一些网卡错误还是它可能是什么?

2 个答案:

答案 0 :(得分:2)

使用send_to。毕竟,UDP是一种无连接协议。

答案 1 :(得分:2)

Boost.Asio抛出一个值为boost::asio::error::connection_refused的错误,因为底层套接字的send*()操作返回的错误代码为ECONNREFUSED。根据{{​​3}}手册页,send*()函数可以返回ECONNREFUSED

  

udpsocket记录的所有错误都可能由UDP套接字上的发送或接收返回。

     

ECONNREFUSED
  没有接收器与目标地址相关联。这可能是由通过套接字发送的先前数据包引起的。

虽然在无连接协议上接收与连接相关的错误可能很奇怪,但仍允许该服务返回检测到的错误。协议的不可靠部分阻止呼叫者接收到目的地接收到消息的确认。但是,如果服务知道目标没有收到消息,则不会阻止服务报告连接拒绝错误。