2012-03-22 4 views
5

私はブーストで返さスーパー有用なエラーメッセージがで、ブーストのASIO SSL実装で時折通信障害を持っている「asio.ssl:336458004」boost asio sslエラーコードを解読するにはどうすればよいですか?

私は、数値図は構成集約構造のいくつかの並べ替えがあると思われますLinuxのエラーコード、boost asioエラーコード、およびsslエラーコードには '336458004'への参照がないので、おそらくそれは動的に構築されなければならないと私は言う。

誰でもこのエラーコードをどのように解読するべきかについていくつかの洞察を提供できますか?ありがとうございます。

答えて

11

彼らは暗号/ ERRからERR_PACKを使用/ 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 –

3

私は結局、デバッグ時にopensslをビルドし、OpenSSLエラー報告機能ERR_put_errorにブレークポイントを設定することで、この問題についていくつかの洞察を得ました。

コールスタックは、ハンドシェーク機能が初期化されていないことが原因で発生した問題で、SSL_readに由来することを示しました。 ERR_put_error関数で実際に使用されているエラー番号は276です。ブーストがこれを336458004にマニューキングする方法は私の外にあります。バグ自体は、私がリモートHTTPSサーバにプロキシをトンネリングするときにSSL機能を切り替えるために使用していたグローバルフラグによって引き起こされました。

これは誰かを助けることを望みます。

関連する問題