libcurl使用注意"/>
libcurl使用注意
libcurl使用注意:
注意点1:
现象:http短连接超过一定次数后一直返回错误7,即CURLE_COULDNT_CONNECT
过程有打印:Immediate connect fail for 114.116.228.34: Too many open files
使用netstat查看发现有大量的TCP连接保持在CLOSE_WAIT状态:
原因:也就是说,默认情况下libcurl完成一个任务以后,出于重用连接的考虑不会马上关闭
如果没有新的TCP请求来重用这个连接,那么只能等到CLOSE_WAIT超时,这个时间默认在7200秒甚至更高,
太多的CLOSE_WAIT连接会导致性能问题,超过系统限定的文件或socket打开数量限制,出现Too many open files
解决方法:curl_easy_setopt(curl, CURLOPT_FORBID_REUSE, 1);
最好再修改一下TCP参数调低CLOSE_WAIT和TIME_WAIT的超时时间
注意点2:
现象:多线程调用libcurl出现错误
原因:libcurl是多线程安全的,除了这个初始化 curl_global_init(CURL_GLOBAL_ALL); curl_global_cleanup();
解决方法:要在主线程或者程序开始的地方调用curl_global_init(CURL_GLOBAL_ALL);进行初始化,结束前调用curl_global_cleanup();
程序调用libcurl中的任何其他函数之前,必须在程序中至少调用此函数一次(程序是共享内存空间的所有代码)。
它设置的环境对于程序的生命周期是恒定的,并且对于每个程序都是相同的,因此多个调用与一个调用具有相同的效果。
如果没有主动调用此函数,在掉curl_easy_init()时会检测有没调用过curl_global_init,没有则会进行调用
更多推荐
libcurl使用注意
发布评论