Bonjour à tous,
Je fais appel à vous car j'ai un problème que j'ai passé la journée à essayer de résoudre...
En fait j'ai une classe HttpClient qui permet d'envoyer des requêtes HTTP et de récupérer la réponse. Mon problème est que j'utilisais jusqu'à présent la méthode read_until mais je me suis vite heurté au fait que si le serveur ne répondait pas à la requête alors la fonction restait bloqué et le programme ne se quittait jamais.
J'ai donc voulu utilisé la méthode async_read_until ceci afin d'implémenter un système de timeout. Le handler de réception était une méthode de la classe HttpClient. J'ai donc essayé le code suivant :
Et le handler :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 std::cout << "Before call" << std::endl; boost::asio::async_read_until(socket, response_streambuf, "\r\n\r\n", boost::bind(&HttpClient::Header_receive_handler, this, _1, _2)); std::cout << "After call" << std::endl;
Le problème est que la méthode Header_receive_handler n'est jamais appelée (pas de message Start receive handler...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 void HttpClient::Header_receive_handler(const boost::system::error_code & error, std::size_t bytes_transferred) { std::cout << "Start receive handler for ip address " << this->ipAddress << std::endl; if (!error) { ... } }
Si une âme charitable pouvait m'éclairer
Merci d'avance,
Yann.
Partager