2012-03-22 163 views
5

我有在升压ASIO SSL实现一个偶然的通信故障,通过升压返回超级有用的错误消息为“asio.ssl:336458004”如何解读boost asio ssl错误代码?

我怀疑这个数字的数字是某种聚集结构组成的SSL标志,我说因为linux错误代码,boost asio错误代码和ssl错误代码没有提及'336458004',所以推测它必须是动态构建的。

任何人都可以提供一些见解,我应该如何解码这个错误代码?谢谢。

回答

11

他们使用ERR_PACK从加密/ ERR/err.h

这将使转换误差串

#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; 
} 

可能不包括在升压所以使用纯套接字时ASIO并不需要链接到SSL

+0

感谢您发布此信息。 +1 – 2013-02-18 21:16:10

3

我最终通过在调试中构建openssl并在OpenSSL错误报告功能ERR_put_error上放置断点,最终获得了一些有关此问题的信息。

调用堆栈显示问题源于SSL_read,这是由于握手函数尚未初始化的事实造成的。 ERR_put_error函数使用的实际错误编号是276,如何将提升到336458004的能力超出了我的想象。这个错误本身是由我用来切换SSL功能的全局标志导致的,因为我通过代理将隧道连接到远程HTTPS服务器上。

希望这可以帮助别人。