2012-03-22 165 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服務器上。

希望這可以幫助別人。