c++ - 使用 asio null_buffers boost asio udp 套接字

标签 c++ boost udp boost-asio

我想使用 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 器式集成:

enter image description here

参见例如这里的文档 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/

相关文章:

c# - 带有 SSL 流的 UDP

c++ - 所有未继承的类都应该是最终的吗?

c++ - Mapbox-GL 为什么不使用 AGG 进行 map 渲染?

c++ - 在 xcode 中静态链接 libcurl 时出现问题

c++ - 如何通过引用相同的模板函数来传递一行 boost::multi_array 和 std::vector?

c++ - 解析位置参数

c - 使用 getsockname() 获取我自己的 IP 地址

c# - 如何将带有 VARIANT 的 C++ 方法转换为没有 VARIANT 的 C#?

c++ - 在 Mac OS X 上使用不同的编译器构建 boost

C++ UDP 在一个类中接收一个 vector