Tengo un servidor que recibe una cadena comprimida (comprimida con zlib) de un cliente, y estaba usando async_receive
de la biblioteca boost::asio
para recibir esta cadena, pero resulta que no hay garantía de que se recibirán todos los bytes, así que ahora tengo que cambiarlo a async_read
. El problema al que me enfrento es que el tamaño de los bytes recibidos es variable, por lo que no estoy seguro de cómo usar async_read
sin saber la cantidad de bytes que se recibirán. Con el async_receive
solo tengo un boost::array<char, 1024>
, sin embargo, este es un buffer que no necesariamente se llena por completo.boost :: asio async_read garantizan que se leen todos los bytes
Me pregunto si alguien puede sugerir una solución donde puedo usar async_read aunque no sé la cantidad de bytes que se recibirán por adelantado?
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
es una boost::array<char, 1024>
+1 buen resumen de algunas soluciones posibles –