クライアントから圧縮された文字列(zlibで圧縮された)を受け取るサーバーがあり、この文字列を受け取るためにboost::asio
ライブラリのasync_receive
を使用していましたが、すべてのバイトが受信されるという保証はないので、今度はそれをasync_read
に変更する必要があります。私が直面している問題は、受信したバイトのサイズが可変であるため、受信するバイト数を知らずにasync_read
を使用する方法がわかりません。 async_receive
ではちょうどboost::array<char, 1024>
がありますが、これは必ずしも完全には満たされていないバッファです。boost :: asio async_read保証すべてのバイトが読み取られる
誰もが、私は事前に受信するバイト数を知らないにもかかわらずasync_read使用できるソリューションを提案できる場合、私は疑問に思いましたか?
void tcp_connection::start(boost::shared_ptr<ResolverQueueHandler> queue_handler)
{
if (!_queue_handler.get())
_queue_handler = queue_handler;
std::fill(buff.begin(), buff.end(), 0);
//socket_.async_receive(boost::asio::buffer(buff), boost::bind(&tcp_connection::handle_read, shared_from_this(), boost::asio::placeholders::error));
boost::asio::async_read(socket_, boost::asio::buffer(buff), boost::bind(&tcp_connection::handle_read, shared_from_this(), boost::asio::placeholders::error));
}
buff
はboost::array<char, 1024>
+1可能な解決策の素敵な要約 –