У меня была такая же проблема. В моем случае я читал в std :: vector так:
boost::asio::async_read(socket_,
st::asio::buffer(*message,message->size()),
boost::bind(
&ActiveSocketServerSession::handleFixLengthRead,
shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)
);
У меня есть адаптивный вектор для принятия варианта с числом байтов
std::vector<unsigned char>* message;
message = new std::vector<unsigned char> (sizePacket);
Когда я получал первый пакет, все шло нормально, но после первого никогда не прекращается разблокировка handle_reader без данных.
Мое решение состояло в том, чтобы удалить мой вектор и снова выделить место после его обработки:
void ActiveSocketServerSession::handleFixLengthRead( const boost::system::error_code& error,
std::size_t bytes_transferred){
--> processing your data (save to another site)
--> delete message;
--> message = new std::vector<unsigned char> (sizePacket);
//starting to read again
boost::asio::async_read(socket_,
boost::asio::buffer(*message,message->size()),
boost::bind(
&ActiveSocketServerSession::handleFixLengthRead,
shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)
);
}else{
logMessage.str("");
logMessage << "Error handling data id: "<<getId()<< "from port";
}
}
Я нашел это решение, читающее это
После помещения этих двух строк все идет хорошо.