boost asio ssl async_shutdown siempre termina con un error?

Tengo un pequeño cliente SSL que he programado en boost 1.55 asio, y estoy tratando de entender por québoost::asio::ssl::stream::async_shutdown() siempre falla El cliente es muy similar (casi idéntico) a los ejemplos de cliente SSL en la documentación de impulso, ya que pasa por unboost::asio::ip::tcp::resolver::async_resolve() ->boost::asio::ssl::stream::async_connect() ->boost::asio::ssl::stream::async_handshake() secuencia de devolución de llamada. Todo esto funciona como se esperaba y elasync_handshake() la devolución de llamada obtiene un todo claroboost::system::error_code.

Desde elasync_handshake() devolución de llamada, llamoasync_shutdown() (No transfiero ningún dato, este objeto es más para probar el apretón de manos):

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() entonces se llama, pero siempre con un error? El error es valor = 2 enasio.misc, que es 'Fin del archivo'. He intentado esto con una variedad de servidores SSL, y siempre parece que obtengo estoasio.misc error. Que esto no es un error de OpenSL subyacente me sugiere que podría estar haciendo un mal uso de Asio de alguna manera ...

Alguien sabe por qué esto podría estar sucediendo? Tenía la impresión de que cerrar la conexión conasync_shutdown() era lo correcto, pero supongo que podría llamarboost::asio::ssl::stream.lowestlayer().close() para cerrar el zócalo por debajo de openssl si esa es la forma esperada de hacer esto (y de hecho, los ejemplos de asio ssl parecen indicar que esta es la forma correcta de cerrar).

Respuestas a la pregunta(2)

Su respuesta a la pregunta