SSL_CTX_new进入循环并挂起应用程序

时间:2017-07-12 12:17:32

标签: windows visual-c++ openssl client-server

我正在开发一个客户端应用程序,它使用openssl 1.0.2f使用c ++将数据流式传输到服务器,其中SSL_CTX_new的调用在连接启动后不久就会挂起60%的时间。有时候呼叫会在一段时间后恢复(从大约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工具

捕获的快照

very sleepy debugging snapshot

我正在使用VC ++并配置了整个程序优化并启用了SSE2指令集(禁用这些优化似乎不会对结果进行任何更改)。

我遇到一个thread谈论类似的问题,但是没有提供解决方案,我没有发现任何其他线程谈论这类问题,有人可以帮助我这个?

提前致谢。

1 个答案:

答案 0 :(得分:1)

问题似乎是openssl 1.0.2h版本中的一个可能的错误,将其升级到最新版本(1.1.0e)解决了这个问题。