libcurl使用注意

本文介绍了libcurl使用的两个注意点。一是http短连接超次数后返回错误7,原因是默认完成任务后不马上关闭连接,导致CLOSE_WAIT过多,解决方法是设置禁止重用并调低超时时间;二是多线程调用出错,需在主线程或程序开始处初始化,结束前清理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,没有则会进行调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值