2012-03-22 2 views
5

मैं एक बढ़ावा asio ssl कार्यान्वयन में एक सामयिक संचार विफलता मिल गया है, सुपर उपयोगी त्रुटि बढ़ावा द्वारा लौटाए गए संदेश '336,458,004 asio.ssl' है एसएसएल झंडे के, मैं कहता हूं कि लिनक्स त्रुटि कोड, बूस्ट एएसओ त्रुटि कोड और एसएसएल त्रुटि कोड में '336458004' का कोई संदर्भ नहीं है, इसलिए संभवतः इसे गतिशील रूप से बनाया जाना चाहिए।एक एसएसएल एसएसएल त्रुटि कोड को बढ़ावा देने के लिए कैसे?</p> <p>मुझे लगता है कि संख्यात्मक आंकड़े बना कुल निर्माण के कुछ प्रकार है:

क्या कोई इस त्रुटि कोड को समझने में कुछ अंतर्दृष्टि प्रदान कर सकता है ?, धन्यवाद।

उत्तर

11

वे क्रिप्टो/अं से 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 के निर्माण और ओपनएसएसएल त्रुटि रिपोर्टिंग फ़ंक्शन ERR_put_error पर ब्रेकपॉइंट डालने से समस्या में कुछ अंतर्दृष्टि प्राप्त की।

कॉलस्टैक ने दिखाया कि समस्या SSL_read से उत्पन्न हुई थी, इस तथ्य के कारण कि हैंडशेक फ़ंक्शन प्रारंभ नहीं किया गया था। ERR_put_error फ़ंक्शन द्वारा उपयोग की जाने वाली वास्तविक त्रुटि संख्या 276 है, 336458004 में इसे उलझाने में कितना बढ़ावा मिलता है मेरे बाहर है। बग स्वयं एक वैश्विक ध्वज के कारण हुआ था जिसका उपयोग मैं एसएसएल कार्यों को टॉगल करने के लिए कर रहा था क्योंकि मैं प्रॉक्सी के माध्यम से एक दूरस्थ HTTPS सर्वर पर सुरंग करता हूं।

उम्मीद है कि यह किसी की मदद करेगा।

संबंधित मुद्दे