我有在升壓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