【发布时间】:2011-02-08 13:28:53
【问题描述】:
我有一个从客户端接收压缩字符串(用 zlib 压缩)的服务器,我使用 boost::asio 库中的 async_receive 来接收这个字符串,但事实证明,不能保证所有字节将被接收,所以我现在必须将其更改为async_read。我面临的问题是接收到的字节大小是可变的,所以在不知道要接收的字节数的情况下,我不确定如何使用async_read。对于async_receive,我只有一个boost::array<char, 1024>,但这是一个不一定完全填满的缓冲区。
我想知道是否有人可以建议我可以使用 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>
【问题讨论】:
标签: c++ asynchronous boost-asio