博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用libcurl遇到的坑
阅读量:4165 次
发布时间:2019-05-26

本文共 1092 字,大约阅读时间需要 3 分钟。

1、当断网或者网络较差,上传文件、下载文件或者和HTTP请求等出现死锁

需要设置一些超时等参数,如下:

curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L);

    /* abort if slower than 1 bytes/sec during 6 seconds */

curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 1);

curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME,  6);

2、在上传文件时,无网络等,耗时300s

curl_easy_perform failed, error code: 28

主要的原因是设置 curl_setopt(curl, CURLOPT_NOSIGNAL,1L);   该选项禁止访问超时候抛出超时信号。

打开setopt.c查看时,源码如下:

 

在connect.c中定义:连接超时默认为300s

#define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */ 

3、正常使用流程是先调用curl_global_init初始化资源,而这个函数不是线程安全的。curl_easy_init发现没有做初始化时会自动初始化,多个线程同时进行curl_easy_init时会导致异常。curl官方建议在主线程中先做初始化。

curl_global_init(CURL_GLOBAL_ALL); 

4、设置进度条用curl_easy_setopt(curlhandle, CURLOPT_XFERINFOFUNCTION, progress_callback);需要注意的是CURLOPT_XFERINFOFUNCTION所对应的回调函数参数必须是curl_off_t,不能使double;但CURLOPT_PROGRESSFUNCTION所对应的回调函数必须是double,不能输curl_off_t。如果形参设置不对,会导致数据出现异常。官方建议使用CURLOPT_XFERINFOFUNCTION,它是CURLOPT_PROGRESSFUNCTION的替代品。

注意,在设置curl_easy_setopt(curlhandle, CURLOPT_RESUME_FROM_LARGE, resume_position)参数resume_position必须是curl_off_t,不能使int或double,否则会导致数据异常。

 

转载地址:http://yjqxi.baihongyu.com/

你可能感兴趣的文章
showDialog
查看>>
Flex 拖拽范例
查看>>
flash builder 4 编译器参数
查看>>
包含库的问题
查看>>
flex 中 bindable的意义
查看>>
flex常用网站
查看>>
flex 页面跳转
查看>>
flex 3.0中关于两个.mxml文件之间链接的简单方法
查看>>
使用viewstack
查看>>
Flex 学习站点汇总
查看>>
12个flex常用代码
查看>>
Flex项目开发资源
查看>>
[Flex]Flex编程注意之直接获取某个组件的对象(this[]用法)
查看>>
Flex4中获取任意组件的ID或其他属性值
查看>>
Flex4中获取任意组件的ID或其他属性值
查看>>
Flex4中获取任意组件的ID或其他属性值
查看>>
flex 设置背景图片
查看>>
Flex 4中组件背景设置(填充方式)group为例子
查看>>
Setting a background image on a Spark Application in Flex 4
查看>>
flash 遍历sprite
查看>>