提升asio udp async_read_from buffersize

时间:2013-09-02 16:17:06

标签: c++ boost boost-asio

我正在阅读boost asio教程中的UDP daytime example。它使用recv_buffer_并使用async_receive_from()来运行接收循环。

socket_.async_receive_from(
    boost::asio::buffer(recv_buffer_), remote_endpoint_,
    boost::bind(&udp_server::handle_receive, this,
      boost::asio::placeholders::error,
      boost::asio::placeholders::bytes_transferred));

我不明白的是

boost::array<char, 1> recv_buffer_;

为什么它的尺寸是一个?如果消息收到超过一个字节的长度怎么办?

修改

正如@Guy Sirton指出的那样,我错过了那页写的hsi部分。

  

因为我们只提供1字节的recv_buffer_来包含客户端   请求,如果客户端,io_service对象将返回错误   送了更大的东西。如果它出现,我们可以忽略这样的错误。

但是无论如何在没有缓冲区大小的情况下读取整个消息?比如每个字符循环receive_some并存储在字符串中吗?

1 个答案:

答案 0 :(得分:1)

需要缓冲区大小。

UDP保留邮件边界。从套接字读取数据时,即使提供的缓冲区的大小小于消息,它也将读取到消息边界。当消息大小大于缓冲区大小时,错误代码将设置为boost::asio::error::message_size

分配足够大的缓冲区以读取最大预期消息大小,或者使用reactor样式操作来缓冲区lazily allocate