boost asio udp async_read_from buffersize

boost asio udp async_read_from buffersize

本文关键字:read buffersize from async asio udp boost      更新时间:2023-10-16

我正在阅读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_来包含客户端的请求时,如果客户端发送任何更大的。如果出现这样的错误,我们可以忽略它。

但是,是否可以在没有缓冲区大小的情况下读取整个消息?比如用每个字符循环receive_some并存储在字符串中?

需要缓冲区大小。

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

分配一个足够大的缓冲区来读取预期的最大消息大小,或者使用reactor样式的操作来延迟分配缓冲区。