我已經沖刷堆棧溢出和互聯網,但我一直無法找到一個答案,爲什麼ssl_accept()保留返回:OpenSSL的ssl_accept()錯誤5
[DEBUG] SSL_accept() : Failed with return 0
[DEBUG] SSL_get_error() returned : 5
[DEBUG] Error string : error:00000005:lib(0):func(0):DH lib
[DEBUG] WSAGetLastError() returned : 0
[DEBUG] GetLastError() returned : 0
[DEBUG] ERR_get_error() returned : 0
編輯: 我的興趣ssl_accept的( )返回0,定義爲(相應地,對於很少和無用的OpenSSL文檔): 「TLS/SSL握手不成功,但是被關閉控制,並且由TLS/SSL協議的規範來調用SSL_get_error()價值ret找出原因。「
下面是服務器端的片段,我可以吠叫錯誤的樹,這個問題是由客戶端代碼引起的嗎?
client = accept(server, (sockaddr*) &clientsockaddrin, &len);
SSL* ssl = SSL_new(ctx);
SSL_set_fd(ssl, client);
std::cout << "+--------------------------------------------------+"
<< std::endl;
int r = SSL_accept(ssl);
if (r != 1)
{
int err_SSL_get_error = SSL_get_error(ssl, r);
int err_GetLastError = GetLastError();
int err_WSAGetLastError = WSAGetLastError();
int err_ERR_get_error = ERR_get_error();
std::cout << "[DEBUG] SSL_accept() : Failed with return "
<< r << std::endl;
std::cout << "[DEBUG] SSL_get_error() returned : "
<< err_SSL_get_error << std::endl;
std::cout << "[DEBUG] Error string : "
<< ERR_error_string(err_SSL_get_error, NULL)
<< std::endl;
std::cout << "[DEBUG] WSAGetLastError() returned : "
<< err_WSAGetLastError << std::endl;
std::cout << "[DEBUG] GetLastError() returned : "
<< err_GetLastError << std::endl;
std::cout << "[DEBUG] ERR_get_error() returned : "
<< err_ERR_get_error << std::endl;
std::cout << "+--------------------------------------------------+"
<< std::endl;
break;
}
感謝您的幫助,因爲這是我逼瘋:(
Wots'5'?拒絕訪問? –
這是我不確定的,我無法找到任何明確的錯誤代碼列表,沒有經過我猜測的OpenSSL源代碼? –
'client = accept(...)'失敗了嗎?它不清楚你是否正在執行錯誤檢查。除非您在防火牆規則中設置了例外,否則Vista和更高版本(甚至XP SP 2)防火牆將默認拒絕訪問。 – jww