2012-03-22 22 views
5

Tôi gặp sự cố liên lạc không thường xuyên trong việc triển khai asio ssl tăng cường, thông báo lỗi siêu hữu ích được trả lại bằng cách tăng là 'asio.ssl: 336458004'Làm cách nào để giải mã mã lỗi asio ssl tăng?

Tôi nghi ngờ rằng con số là một số cấu trúc tổng hợp bao gồm của cờ SSL, tôi nói rằng vì mã lỗi linux, mã lỗi asio tăng và mã lỗi ssl không có bất kỳ tham chiếu đến '336458004', vì vậy có lẽ nó phải được xây dựng động.

Có ai có thể cung cấp một số thông tin chi tiết về cách tôi nên giải mã mã lỗi này không ?, Cảm ơn.

Trả lời

11

họ sử dụng ERR_PACK từ crypto/err/err.h

này sẽ cho phép chuyển đổi lỗi cho chuỗi

#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; 
} 

lẽ không được đưa vào tăng nên ASIO không cần liên kết đến ssl khi sử dụng ổ cắm thuần túy

+0

Cảm ơn bạn đã đăng bài này. +1 –

3

Cuối cùng tôi đã đạt được một số thông tin chi tiết về vấn đề này bằng cách xây dựng openssl trong gỡ lỗi và đặt điểm ngắt trên hàm báo cáo lỗi OpenSSL ERR_put_error.

Callstack cho thấy rằng sự cố bắt nguồn từ SSL_read, do thực tế là chức năng bắt tay chưa được khởi tạo. Số lỗi thực tế được sử dụng bởi các chức năng ERR_put_error là 276, làm thế nào tăng quản lý để mangle này vào 336458004 là ngoài tôi. Bản thân lỗi này được gây ra bởi một lá cờ toàn cầu mà tôi đang sử dụng để chuyển đổi các chức năng SSL khi tôi đi qua một proxy trên một máy chủ HTTPS từ xa.

Hy vọng điều này sẽ giúp ai đó.

Các vấn đề liên quan