boost asio ssl async_shutdown sempre termina com um erro?

Eu tenho um pequeno cliente ssl que programei no boost 1.55 asio, e estou tentando descobrir por queboost::asio::ssl::stream::async_shutdown() sempre falha. O cliente é muito semelhante (quase idêntico) aos exemplos de clientes ssl na documentação do boost, na medida em que passa por umboost::asio::ip::tcp::resolver::async_resolve() ->boost::asio::ssl::stream::async_connect() ->boost::asio::ssl::stream::async_handshake() sequência de retorno de chamada. Tudo isso funciona como esperado e oasync_handshake() retorno de chamada fica totalmenteboost::system::error_code.

Deasync_handshake() retorno de chamada, eu ligoasync_shutdown() (Eu não transfiro nenhum dado - este objeto é mais para testar o aperto de mão):

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() é então chamado, mas sempre com um erro? O erro é value = 2 inasio.misc, que é 'Fim do arquivo'. Eu tentei isso com uma variedade de servidores ssl, e sempre pareço entender issoasio.misc erro. O fato de este não ser um erro openssl subjacente sugere que eu possa estar usando mal o asio de alguma forma ...?

Alguém sabe por que isso pode estar acontecendo? Fiquei com a impressão de que desligando a conexão comasync_shutdown() era a coisa certa a fazer, mas acho que eu poderia ligarboost::asio::ssl::stream.lowestlayer().close() fechar o soquete do openssl se essa é a maneira esperada de fazer isso (e de fato os exemplos asio ssl parecem indicar que esta é a maneira correta de desligar).

questionAnswers(2)

yourAnswerToTheQuestion