質問

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)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 - それは、それとは反対に、あなたが「より大きなサイズ」を得るのには間違いなく役に立たないでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top