boost asio ssl async_shutdown endet immer mit einem Fehler?

Ich habe einen kleinen SSL-Client, den ich in Boost 1.55 Asio programmiert habe, und ich versuche herauszufinden, warumboost::asio::ssl::stream::async_shutdown() schlägt immer fehl. Der Client ist den ssl-Client-Beispielen in der Boost-Dokumentation sehr ähnlich (fast identisch), da er ein @ durchläufboost::asio::ip::tcp::resolver::async_resolve() ->boost::asio::ssl::stream::async_connect() ->boost::asio::ssl::stream::async_handshake() Rückrufsequenz. All dies funktioniert wie erwartet und dasasync_handshake() callback bekommt eine Entwarnungboost::system::error_code.

Von demasync_handshake() Rückruf, ich rufeasync_shutdown() (Ich übertrage keine Daten - dieses Objekt dient eher zum Testen des Handshakes):

void ClientCertificateFinder::handle_handshake(const boost::system::error_code& e)
{
    if ( !e )
    {
        m_socket.async_shutdown( boost::bind( &ClientCertificateFinder::handle_shutdown_after_success, 
            this, 
            boost::asio::placeholders::error ) );
    }
    else
    {
        m_handler( e, IssuerNameList() );
    }
}

handle_shutdown_after_success() wird dann aufgerufen, aber immer mit einem Fehler? Der Fehler ist Wert = 2 inasio.misc, das ist "Dateiende". Ich habe dies mit einer Vielzahl von SSL-Servern versucht, und ich scheine immer diese @ zu bekommasio.misc Error. Dass dies kein zugrunde liegender openssl-Fehler ist, lässt vermuten, dass ich asio auf irgendeine Weise missbraucht habe ...?

Weiß jemand, warum das passieren könnte? Ich hatte den Eindruck, dass die Verbindung mit @ beendet wirasync_shutdown() war das Richtige, aber ich denke, ich könnte einfach @ anrufboost::asio::ssl::stream.lowestlayer().close(), um den Socket unter openssl zu schließen, wenn dies der erwartete Weg ist (und tatsächlich scheinen die Beispiele für asio ssl darauf hinzudeuten, dass dies der richtige Weg ist, um das System herunterzufahren).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage