为什么提升 asio udp 连接会抛出"send: Connection refused"?



我认为udp连接实际上并不关心另一端是否有对等端,那么为什么boost asio udp连接会在socket->send( boost::asio::buffer( data.get(), length ) );调用上抛出"send:connection rejected"(我从Linux发送到Windows,只是发送而不尝试读取任何内容)?是网卡错误还是可能是什么?

Boost.Asio正在抛出一个值为boost::asio::error::connection_refused的错误,因为底层套接字的send*()操作返回了ECONNREFUSED的错误代码。根据udp手册页面,允许send*()函数返回ECONNREFUSED:

套接字或ip记录的所有错误都可以通过UDP套接字上的发送或接收返回。

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

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

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

相关内容

最新更新