SSL_CTX_new 进入循环并挂起应用程序
SSL_CTX_new goes into a loop and hangs the application
我正在开发一个客户端应用程序,该应用程序使用 openssl 1.0.2f 使用 C++ 将数据流式传输到服务器,在连接开始后不久,对 SSL_CTX_new 的调用在 60% 的时间内挂起。有时会在一段时间后调用 returns(大约 30 秒到 1 分钟后从挂起中恢复),但大多数时候不会。
这是我的代码:
SSL_library_init();
SSLeay_add_ssl_algorithms ( ) ;
SSL_load_error_strings ( ) ;
BIO_new_fp ( stderr , BIO_NOCLOSE ) ;
const SSL_METHOD *m_ssl_client_method = TLSv1_2_client_method ( );
if(m_ssl_client_method)
{
sslContext = SSL_CTX_new ( m_ssl_client_method ) ;
}
这看起来类似于 openSSL wiki
中给出的 SSL 初始化步骤
通过非常困倦的分析器调试后,我开始知道随机数的初始化导致挂起,看起来它消耗了 100% 的 cpu 并进入无限循环。
这是从 verysleepy 工具捕获的快照
我正在使用 VC++ 并配置了整个程序优化并启用了 SSE2 指令集的使用(禁用这些优化似乎不会给结果带来任何变化)。
我遇到了一个 thread 讨论类似问题但没有为此提供解决方案,我没有找到任何其他讨论此类问题的线程,有人可以帮我解决这个问题?
提前致谢。
问题似乎是 openssl 1.0.2h 版本可能存在的错误,将其升级到最新版本 (1.1.0e) 解决了问题。
我正在开发一个客户端应用程序,该应用程序使用 openssl 1.0.2f 使用 C++ 将数据流式传输到服务器,在连接开始后不久,对 SSL_CTX_new 的调用在 60% 的时间内挂起。有时会在一段时间后调用 returns(大约 30 秒到 1 分钟后从挂起中恢复),但大多数时候不会。
这是我的代码:
SSL_library_init();
SSLeay_add_ssl_algorithms ( ) ;
SSL_load_error_strings ( ) ;
BIO_new_fp ( stderr , BIO_NOCLOSE ) ;
const SSL_METHOD *m_ssl_client_method = TLSv1_2_client_method ( );
if(m_ssl_client_method)
{
sslContext = SSL_CTX_new ( m_ssl_client_method ) ;
}
这看起来类似于 openSSL wiki
中给出的 SSL 初始化步骤通过非常困倦的分析器调试后,我开始知道随机数的初始化导致挂起,看起来它消耗了 100% 的 cpu 并进入无限循环。
这是从 verysleepy 工具捕获的快照
我正在使用 VC++ 并配置了整个程序优化并启用了 SSE2 指令集的使用(禁用这些优化似乎不会给结果带来任何变化)。
我遇到了一个 thread 讨论类似问题但没有为此提供解决方案,我没有找到任何其他讨论此类问题的线程,有人可以帮我解决这个问题?
提前致谢。
问题似乎是 openssl 1.0.2h 版本可能存在的错误,将其升级到最新版本 (1.1.0e) 解决了问题。