程序在极高的压力下运行很长时间出现,md_rand.c:312: ssleay_rand_add: Assertion `md_c[1] == md_count[1]' failed。
原因是编译openssl的CFLAGS没有设置为thread safe,多线程同时调用libcrypto的RAND_add()函数会出断言错误。SSL_connect()和SSL_accept()都会调用RAND_add()。
#if !defined(OPENSSL_THREADS) && !defined(OPENSSL_SYS_WIN32)
assert(md_c[1] == md_count[1]);
#endif
编译时 -DOPENSSL_THREADS -pthread -D_REENTRANT -D_THREAD_SAFE -D_THREADSAFE
本文详细介绍了在编译OpenSSL时未正确设置CFLAGS参数导致多线程调用libcrypto的RAND_add()函数时出现断言错误的问题,并提供了解决方案,包括如何在编译时添加-DOPENSSL_THREADS、-pthread、-D_REENTRANT、-D_THREAD_SAFE和-D_THREADSAFE等参数以确保线程安全。
1448

被折叠的 条评论
为什么被折叠?



