2

2 つの tcp サーバー間でデータを転送する boost:asio ライブラリを使用するプログラムを作成しました。1 つのサーバーは、次のコードを使用してデータを送信します。

std::shared_ptr<std::string> s =
  std::make_shared<std::string>(message);
boost::asio::async_write(socket_, boost::asio::buffer(*s),
  std::bind(&TcpServer::HandleWrite, shared_from_this(), s, _1, _2));

別の TcpServer で、async_read_until を使用してデータを取得すると、すべて正常に動作しますが、async_read_until を async_read に置き換えると、End Of Fileエラーが発生します。

boost::asio::streambuf input_buffer;
boost::asio::async_read_until(socket_, input_buffer, match_condition(),
  std::bind(&TcpServer::HandleRead, shared_from_this(), _1));
//boost::asio::async_read(socket_, input_buffer, boost::asio::transfer_all(),
//  std::bind(&TcpServer::HandleRead, shared_from_this(), _1));

boost::asio::transfer_at_least(1)async_read で使用すると、期待どおりの結果が得られます。

なぜこれが起こったのですか?

4

1 に答える 1