Boost::asio lecture asynchrone
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 :
Code:
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; |
Et le handler :
Code:
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)
{
...
}
} |
Le problème est que la méthode Header_receive_handler n'est jamais appelée (pas de message Start receive handler...)
Si une âme charitable pouvait m'éclairer :)
Merci d'avance,
Yann.