1
私のC++プログラムでhttpでパッケージを受け取ろうとしています。私はその目的のためにBoost.Asioを使用しています。ブースト.Asioのasync_read_some全体のメッセージ?
// m_buffer is declared as: std::array<char, 8192> m_buffer;
auto buf = boost::asio::buffer(m_buffer);
newConnection->getSocket().async_read_some(
buf,
boost::bind(&TcpServer::handleRead, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)
);
は、任意のパッケージを取得するには、この十分です:?私はパッケージを読み取るために、このコードを持っている私のhandleAccept方法で
8192バイトを超えるパッケージを取得するにはどうすればよいですか?
OKです。ですから、_handleRead_の 'bytesTransferred'パラメータが0になるまで、handleReadを再帰的に呼び出す方法がありますか? – Ctwx
いいえ、あなたは決して 'bytes_transferred' == 0.を受け取ることはありません。あなたのメッセージプロトコルは、メッセージの先頭でメッセージ本文のサイズを教えてくれるか、完了したらソケットを外してください。後者の場合、 'error'プレースホルダをチェックする必要があります。 – kenba
よろしくお願いいたします。それはうまくいくでしょう。 – Ctwx