我想使用 Boost ASIO 库从 UDP 套接字异步接收数据。我不想在使用 async_receive_from 接收数据时使用固定长度的缓冲区。
下面的代码是我如何使用 boost asio::null_buffers 来确定传入的数据包大小并相应地创建缓冲区。
socket.async_receive_from(boost::asio::null_buffers(),
remote_endpoint,
[&](boost::system::error_code ec, std::size_t bytes) {
unsigned int readbytes = socket.available();
if (readbytes > buffer_size) {
//reallocate buffer
}
std::size_t recvbytes = socket.receive_from(
boost::asio::buffer(buffer, buffer_size), remote_endpoint, 0, error);
一切都按预期工作,但是,我想知道 boost null_buffer 是否分配了一个内部缓冲区来保存接收到的 UDP 数据包的拷贝,并在调用 socket.receive_from() 时复制到给定的缓冲区。
我还想知道在使用 UDP 套接字时使用 null_buffer 对性能和内存使用有何影响。
最佳答案
RichardHodges 说的。
此外,Boost 1.66.0 有 the new interface其中 null_buffers
已过时,可以使用套接字上的 async_wait
操作完成 react 器式集成:
参见例如这里的文档 https://www.boost.org/doc/libs/1_66_0/doc/html/boost_asio/reference/basic_socket/wait/overload1.html
关于c++ - 使用 asio null_buffers boost asio udp 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49750786/