boost.asio - 设置最大读取流大小

时间:2010-11-04 05:03:51

标签: c++ boost boost-asio streambuf

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字节,我需要更大的大小。

1 个答案:

答案 0 :(得分:0)

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)代码中的注释引用了限制/限制 streambuf的最大大小 - 所以它肯定无法帮助您获得“更大的尺寸”,相反