问题
多线程libcurl运行一段时间后出现崩掉,没有确定的点,没有确定的URL。一直查看源代码没有问题,最后通过debug跟踪发现是在访问SSL的时候出现的crash。
才想起来openssl是不支持多线程的,要自己做加锁处理。而且libcurl中并没有支持相关的加锁操作。
解决办法:
在初始化libcurl的时候为openssl创建一个互斥锁函数,一个回调函数传给openss
openssl锁l函数原形 :void (* func )(int ,int , const char * ,int)
设置方式:CRYPTO_set_locking_callback(void (* func )(int ,int , const char * ,int));
设置这样一个函数还不够,另外还要配置一个锁id回调函数,这个可以参考openssl多线程下的使用相关。
id函数原形:unsigned int (*func)(void)
设置方式:CRYPTO_set_id_callback(uns

在使用libcurl进行多线程HTTPS请求时,由于openssl的线程不安全,导致运行过程中可能出现崩溃。解决此问题需手动设置openssl的互斥锁和线程ID回调函数。初始化libcurl时,利用CRYPTO_set_locking_callback和CRYPTO_set_id_callback进行设置,配合自定义的加锁和解锁函数,以确保多线程环境下的安全性。
最低0.47元/天 解锁文章
3万+

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



