boost.asio-最大読み取りストリームサイズを設定します
-
28-09-2019 - |
質問
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
- それは、それとは反対に、あなたが「より大きなサイズ」を得るのには間違いなく役に立たないでしょう。
所属していません StackOverflow