J'utilise des sockets synchrones boost :: asio SSL dans mon application. J'initialise tous les paramètres, puis me connecte à certains hôtes (l'un après l'autre) et fais une requête GET pour chaque hôte. Tout fonctionne jusqu'à ce que j'obtienne une erreur "404 - Not Found" pour l'un des hôtes. Après cette erreur, toutes les nouvelles connexions échouent avec une erreur SSL non spécifiée.boost :: asio avec SSL - problèmes après erreur SSL
Dois-je réinitialiser le flux ssl :: en quelque sorte? Est-il possible de réinitialiser le flux ssl :: après chaque connexion?
Dans les extraits de code suivants, j'ai supprimé la gestion des erreurs et toutes les choses non asio liées.
principal:
asio::io_service ioservice;
asio::ssl::context ctx(ioservice, asio::ssl::context::sslv23);
ctx.set_verify_mode(asio::ssl::context::verify_none);
Connector *con = new Connector(ioservice, ctx);
while (!iplist.empty())
{
...
con->ssl_connect(ipaddress, port);
...
}
Connecteur:
Connector::Connector(asio::io_service& io_service, asio::ssl::context &ctx)
: sslSock(io_service, ctx)
{
}
Connector::ssl_connect(std::string ipAdr, std::string port)
{
...
tcp::resolver resolver(ioserv);
tcp::resolver::query query(ipAdr, port);
endpoint_iterator = resolver.resolve(query);
...
asio::error_code errorcode = asio::error::host_not_found;
tcp::resolver::iterator end;
// Establish connection
while (errorcode && endpoint_iterator != end)
{
sslSock.lowest_layer().close();
sslSock.lowest_layer().connect(*endpoint_iterator++, errorcode);
}
sslSock.handshake(asio::ssl::stream_base::client, errorcode);
...
asio::write(...);
...
asio::read(...);
...
sslSock.lowest_layer().close();
...
return;
}
"une erreur SSL non spécifiée" n'est pas une information très utile. OpenSSL fournit de très bons messages d'erreur, si vous voulez les vérifier (par exemple 'ERR_print_errors_fp()'). – caf
@caf - Merci pour l'info. Asio écrit seulement "Erreur SSL". Je vais vérifier si OpenSSL a plus d'infos – mspoerr
@Sam Miller: Oui, j'ai des gestionnaires pour tous les codes de retour et les exceptions. – mspoerr