我已经搜索了Stack Overflow和互联网,但是我无法找到为什么ssl_accept()不断返回的答案:
[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; }
感谢你的帮助,因为这让我很生气:(