CURLE_OPERATION_TIMEDOUTlibcurl 错误码28– *** 作超时

CURLE_OPERATION_TIMEDOUTlibcurl 错误码28–  *** 作超时,第1张

CURLE_OPERATION_TIMEDOUT libcurl 错误码28– *** 作超时

在多线程情况下出现错误码28 是因为没有调用全局初始化函数

static int GlobleInit();//全局初始化,主程序调用一次,只能一次
 static void GlobleFint();

int CHttpClient::GlobleInit()//全局初始化,主程序调用一次
{
 return curl_global_init(CURL_GLOBAL_ALL);
}
void CHttpClient::GlobleFint()
{
 curl_global_cleanup();
}

在调应libcurl库中其他函数之前,必须先调用这个函数对编程环境进行相应的初始化,使每个程序调用libcurl库函数都具有相同的效果。


这个按位组合选择的整形(int)变量可以精确告诉libcurl当下的需要的工作模式。


详细情况,如果你不是十分熟悉整体参数的初始化,您可以设置参数为CURL_GLOABL_ALL。


对所有的需要用到的环境进行初始化,这个函数不是安全线程,在多线程应用中,需要在主线程中调用这个函数。


这个函数设置libcurl所需的环境。


通常情况,如果不显式的调用它,第一次调用 curl_easy_init()时,curl_easy_init 会调用 curl_global_init,在单线程环境下,这不是问题。


但是多线程下就不行了,因为curl_global_init不是线程安全的。


在多个线 程中调用curl_easy_int,然后如果两个线程同时发现curl_global_init还没有被调用,同时调用 curl_global_init,悲剧就发生了。


这种情况发生的概率很小,但可能性是存在的。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/586177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存