2012-03-22 6 views
5

Tengo un fallo en las comunicaciones de vez en cuando en una implementación SSL impulso asio, el mensaje de error muy útiles devuelto por impulso es 'asio.ssl: 336458004'Cómo descifrar un código de error asio ssl?

sospecho que la cifra numérica es una especie de construcción agregado compuesto de las banderas de SSL, digo que debido a que los códigos de error de Linux, los códigos de error Asio boost y los códigos de error SSL no tienen ninguna referencia a '336458004', por lo que presumiblemente debe construirse dinámicamente.

¿Alguien puede darnos una idea de cómo debo descifrar este código de error ?, Gracias.

Respuesta

11

que utilizan ERR_PACK de cripto/err/err.h

esto permitirá error de conversión a cadena

#include <crypto/err/err.h> 

string err = error.message() 
if (error.category() == boost::asio::error::get_ssl_category()) { 
    err = string(" (") 
      +boost::lexical_cast<string>(ERR_GET_LIB(error.value()))+"," 
      +boost::lexical_cast<string>(ERR_GET_FUNC(error.value()))+"," 
      +boost::lexical_cast<string>(ERR_GET_REASON(error.value()))+") " 
    ; 
    //ERR_PACK /* crypto/err/err.h */ 
    char buf[128]; 
    ::ERR_error_string_n(error.value(), buf, sizeof(buf)); 
    err += buf; 
} 

Probablemente no incluido en alza por lo asio no necesita enlace a SSL al utilizar sockets puros

+0

Gracias por publicar esto. +1 –

3

Finalmente obtuve una idea del problema al crear openssl en depuración y poner un punto de interrupción en la función de informe de errores de OpenSSL ERR_put_error.

La pila de llamadas mostró que el problema se originaba en SSL_read, causado por el hecho de que la función de reconocimiento no se había inicializado. El número de error real utilizado por la función ERR_put_error es 276; me resulta imposible saber cómo se logra manipularlo en 336458004. El error en sí mismo fue causado por una bandera global que estaba usando para alternar las funciones SSL a medida que hago un túnel a través de un proxy en un servidor HTTPS remoto.

Espero que esto ayude a alguien.

Cuestiones relacionadas