boost.asio - устанавливает максимальный размер потока чтения - PullRequest
2 голосов
/ 04 ноября 2010

Пример HTTP-клиента на http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/example/http/client/async_client.cpp Пожалуйста, помогите мне изменить максимальный размер буфера , как описано в следующем коде (это из примеров, загруженных с библиотекой, а не с сайта):

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 голосов
/ 04 ноября 2010

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 - так что это точно не поможетВы получаете «больший размер», наоборот.

...