【问题标题】:boost.asio - set maximum read stream sizeboost.asio - 设置最大读取流大小
【发布时间】:2011-05-04 21:19:11
【问题描述】:

http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/example/http/client/async_client.cpp 有一个 HTTP 客户端示例 请帮助我更改最大缓冲区大小,如以下代码中所述(它来自与库一起下载的示例,而不是来自站点):

void handle_write_request(const boost::system::error_code& err)
{
  if (!err)
  {
    // Read the response status line. The response_ streambuf will
    // automatically grow to accommodate the entire line. The growth may be
    // limited by <b>passing a maximum size to the streambuf constructor</b>.
    boost::asio::async_read_until(socket_, response_, "\r\n",
        boost::bind(&client::handle_read_status_line, this,
          boost::asio::placeholders::error));
  }
  else
  {
    std::cout << "Error: " << err.message() << "\n";
  }
}

这是响应缓冲区的构造函数:

boost::asio::streambuf response_;

但是编译器说下面的代码是无效的:

boost::asio::streambuf response_(1024);

似乎默认缓冲区是512 字节大小,我需要更大的大小。

【问题讨论】:

    标签: c++ boost boost-asio streambuf


    【解决方案1】:

    1) 我不确定您的 512 字节限制来自哪里,因为 asio::basic_streambuf 的构造函数具有以下签名(允许它存储超过 512 或 1024 字节):

    explicit basic_streambuf(
        std::size_t max_size = (std::numeric_limits<std::size_t>::max)(),
        const Allocator& allocator = Allocator())
    

    2) 此代码boost::asio::streambuf response_(1024); 无效,因为您不能在声明点初始化成员变量,您必须在构造函数的初始化列表或它的主体中进行。如果你不这样做,它将被默认初始化。

    3) 代码中的注释引用了 limiting/restricting streambuf 的最大尺寸 - 因此它肯定不会帮助您获得“更大的尺寸”,相反。

    【讨论】:

    • response_变量好像根本没有初始化,只是声明使用了?
    • @soulmare: response_ 默认初始化
    猜你喜欢
    • 1970-01-01
    • 2018-06-27
    • 2011-08-11
    • 2013-10-05
    • 2021-01-13
    • 2020-08-28
    • 2021-07-16
    • 1970-01-01
    • 2015-02-22
    相关资源
    最近更新 更多