加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用asio null_buffers增强asio udp套接字

发布时间:2020-12-16 09:20:29 所属栏目:百科 来源:网络整理
导读:我想使用Boost ASIO库异步接收来自UDP套接字的数据.我不想在使用async_receive_from接收数据时使用固定长度的缓冲区. 以下代码是我如何使用boost asio :: null_buffers来确定传入的数据包大小并相应地创建缓冲区. socket.async_receive_from(boost::asio::nu
我想使用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),error);

一切都按预期工作,但是,我想知道boost null_buffer是否分配一个内部缓冲区来保存收到的UDP数据包的副本,并在调用socket.receive_from()时复制到给定的缓冲区.

另外,我想知道在使用UDP套接字时使用null_buffer对性能和内存使用情况有何影响.

解决方法

理查德霍奇斯说的话.

此外,Boost 1.66.0有the new interface,其中null_buffers已过时,并且使用套接字上的async_wait操作可以实现反应堆式集成:

enter image description here

参见例如这里的文档https://www.boost.org/doc/libs/1_66_0/doc/html/boost_asio/reference/basic_socket/wait/overload1.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读