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 で使用すると、期待どおりの結果が得られます。
なぜこれが起こったのですか?