通过Boost Asio获取UDP数据报长度

Get UDP datagram length via Boost Asio?

本文关键字:数据报 UDP 获取 Boost Asio 通过      更新时间:2023-10-16

是否可以通过Boost Asio获取UDP数据报的长度?UDP标头有一个指定UDP数据包长度的字段。有可能通过Boost Asio获得这个值吗?如果没有,如何确定数据包的长度?

asio允许您在执行读取时绑定完成处理程序。完成处理程序的参数之一是数据包长度。

读取的完成处理程序必须满足中指定的要求http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/ReadHandler.html

例如,看看http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp03/echo/async_udp_echo_server.cpp.在对async_receive_from的调用中,指定读取完成后要调用的完成处理程序:

socket_.async_receive_from(
    boost::asio::buffer(data_, max_length), sender_endpoint_,
    boost::bind(&server::handle_receive_from, this,
      boost::asio::placeholders::error,
      boost::asio::placeholders::bytes_transferred));

因此,当执行完成处理程序handle_receive_from时,asio将读取的字节大小传递给处理程序。

void handle_receive_from(const boost::system::error_code& error,
  size_t bytes_recvd)