curl使用curl_easy_perform导致线程或者进程卡死解决办法
2016-11-21 10:35
615 查看
描述:curl提供的curl_easy_perform调用方式是阻塞的,如果没有收到回复,则会导致线程或者进程一直阻塞,除非外界干预。
解决办法:curl提供了CURLOPT_LOW_SPEED_LIMIT CURLOPT_LOW_SPEED_TIME option,主要思想为:如果在指定时间传输速率超过设置的最低值,
则会自动断开该链接。
举例:
curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT , 50);
curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME , 5);
res = curl_easy_perform(curl);
官方文档解释:
CURLOPT_LOW_SPEED_TIME - set low speed limit time period
CURLOPT_LOW_SPEED_LIMIT - set low speed limit in bytes per second
CURLOPT_LOW_SPEED_TIME Pass a long as parameter. It contains the time in number seconds that the transfer
speed should be below theCURLOPT_LOW_SPEED_LIMIT for
the library to consider it too slow and abort.
具体可以参考curl官方文档:
https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html
https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html
对于curl没有特别深入的学习,如果有更好的办法或者上面描述有误,请留言指正,谢谢。
解决办法:curl提供了CURLOPT_LOW_SPEED_LIMIT CURLOPT_LOW_SPEED_TIME option,主要思想为:如果在指定时间传输速率超过设置的最低值,
则会自动断开该链接。
举例:
curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT , 50);
curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME , 5);
res = curl_easy_perform(curl);
官方文档解释:
CURLOPT_LOW_SPEED_TIME - set low speed limit time period
CURLOPT_LOW_SPEED_LIMIT - set low speed limit in bytes per second
CURLOPT_LOW_SPEED_TIME Pass a long as parameter. It contains the time in number seconds that the transfer
speed should be below theCURLOPT_LOW_SPEED_LIMIT for
the library to consider it too slow and abort.
具体可以参考curl官方文档:
https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html
https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html
对于curl没有特别深入的学习,如果有更好的办法或者上面描述有误,请留言指正,谢谢。
相关文章推荐
- 解决APP进程被杀掉之后,导致fragment失效或者错乱的办法
- 使用dubbo注解@Service注册服务后使用aop或者申明式事物导致无法注册的问题解决办法
- PHP无法使用file_get_contents或者curl_init()函数解决办法
- VS 2013使用SOUI时(vcpkgsrv.exe)进程导致物理内存升高解决的办法
- Indy10线程池BUG:Idyarn线程使用Synchronize导致TerminateAllYarns挂死的解决办法
- 嵌入式 解决线程使用sleep或usleep等函数导致整个进程睡眠的问题
- Win7使用Win7codecs导致资源管理器重启的解决办法
- MyEclipse SVN插件冲突导致不能使用解决办法
- Excel对象使用后进程不能退出的完美解决办法
- iis提示“另一个程序正在使用此文件,进程无法访问”解决办法
- C:\Windows\system32\MSVCR100.dll 没有被指定在 Windows 上运行,或者它包含错误。请尝试使用原始安装媒体重新安装程序,或联系您的系统管理员或软件供应商以获取支持。【解决办法】
- 使用 apt-get 的時候,出现目录或者被锁住的解决办法(E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源临时不可用) E: 无法对管理目录(/var/lib/dpkg/)加锁,是不是另一个包管理)
- QT中使用槽函数来关闭窗口,导致内存泄露的问题以及解决办法
- 表正被别的用户或进程使用,数据库引擎无法锁定的解决办法
- DLINQ 使用DataContext快速构建数据访问层DAL,发现Updata采用Attach(Entity t,true)困难重重!(如果实体声明了版本成员或者没有更新检查策略,则只能将它附加为没有原始状态的已修改实体)的解决办法!
- VS2010打开过多的IntelliTrace.exe进程导致虚拟内存不足的解决办法
- QSqlDatabase 使用小结,解决部分数据库操作导致程序崩溃的办法
- 使用了博客园的备份后得到一个xml文件,不知道有没有css或者xslt文件可以在本地阅读文章,在网上找了半天也没有找到解决办法,难道要自己写?
- iis提示“另一个程序正在使用此文件,进程无法访问”解决办法
- iis提示“另一个程序正在使用此文件,进程无法访问”解决办法