为什么我在使用boost :: asio :: null_buffers时无法获得发送方端点?

时间:2014-01-27 05:22:59

标签: c++ boost udp

我想异步读取来自udp套接字的数据,该数据被视为服务器套接字并正在侦听某个端口。

socket_->async_receive_from(
    boost::asio::null_buffers(),
    sender_endpoint_,
    boost::bind(&UdpSocketServer::HandleReceive, 
                shared_from_this(), 
                boost::asio::placeholders::error,
                boost::asio::placeholders::bytes_transferred
    )
); 

问题是:sender_endpoint_始终为0.0.0.0:0,同时从客户端收到一些数据。 当我使用boost :: asio :: buffer(recv_buffer_)代替boost :: aiso :: null_buffers()时, sender_endpoint_来吧。我尝试在谷歌搜索这个有线案例,但无法想象  出。既然以前有人遇到过这个案子?或任何人可以帮忙?非常感谢。

1 个答案:

答案 0 :(得分:0)

你不应该以这种方式使用null_buffers。

null_buffers类型仅用于"最低层"上的async_read/write_some(),即套接字或描述符。它不是任何流类型要求的一部分,因此不支持async_read等组合操作。 Please read this ticket for more information

鉴于上面的跟踪器可能是暂时的,但现在通知的行为方式是,您收到一个(多余的)HandleReceive通知,收到零字节且空sender_endpoint_ - 一个通知您可以丢弃,然后使用正确的端点信息进行后续HandleReceive通知。