J'essaye de recevoir un paquet via http dans mon programme C++. J'utilise Boost.Asio à cette fin.Will Boost.Async_read_some le message entier?
Dans mon méthode handleAccept Je possède ce code pour lire le paquet:
// 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)
);
Est-ce assez pour obtenir un paquet? Comment est-ce que je m'assure qu'il obtiendra des paquets qui sont plus grands que 8192 octets?
OK, cela a du sens. Donc le chemin à parcourir est d'appeler handleRead récursivement jusqu'à ce que le paramètre 'bytesTransferred' de _handleRead_ soit 0? – Ctwx
Non, vous ne recevrez jamais 'bytes_transferred' == 0. Votre protocole de message devrait vous indiquer la taille du corps du message au début d'un message ou déconnecter le socket une fois terminé. Dans le second cas, vous devrez vérifier l'espace réservé 'error'. – kenba
OK merci. Ça va marcher. – Ctwx