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

时间:2013-12-05 04:43:56

标签: c++ header udp boost-asio packet

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

1 个答案:

答案 0 :(得分:2)

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)