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 : 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;
Et le 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)
    {
        ...
    }
 
}
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.