我有在升压ASIO SSL实现一个偶然的通信故障,通过升压返回超级有用的错误消息为“asio.ssl:336458004”如何解读boost asio ssl错误代码?
我怀疑这个数字的数字是某种聚集结构组成的SSL标志,我说因为linux错误代码,boost asio错误代码和ssl错误代码没有提及'336458004',所以推测它必须是动态构建的。
任何人都可以提供一些见解,我应该如何解码这个错误代码?谢谢。
我有在升压ASIO SSL实现一个偶然的通信故障,通过升压返回超级有用的错误消息为“asio.ssl:336458004”如何解读boost asio ssl错误代码?
我怀疑这个数字的数字是某种聚集结构组成的SSL标志,我说因为linux错误代码,boost asio错误代码和ssl错误代码没有提及'336458004',所以推测它必须是动态构建的。
任何人都可以提供一些见解,我应该如何解码这个错误代码?谢谢。
他们使用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
我最终通过在调试中构建openssl并在OpenSSL错误报告功能ERR_put_error
上放置断点,最终获得了一些有关此问题的信息。
调用堆栈显示问题源于SSL_read,这是由于握手函数尚未初始化的事实造成的。 ERR_put_error
函数使用的实际错误编号是276,如何将提升到336458004的能力超出了我的想象。这个错误本身是由我用来切换SSL功能的全局标志导致的,因为我通过代理将隧道连接到远程HTTPS服务器上。
希望这可以帮助别人。
感谢您发布此信息。 +1 – 2013-02-18 21:16:10