curl学习(一):段错误_curlopt_nosignal_libinbin_1014的博客-程序员宅基地

技术标签: curl  c语言  bug  段错误  

c语言使用curl时出现段错误

  • 问题发现
    在使用c语言编程时,按照一般流程使用curl进行http数据的获取,没有错误,但是当开启线程调用该函数频繁时,会出现段错误,并且复现起来较为困难,经后期排查,发现问题出现在了curl上面,处理完该bug后,稍加整理,作为以后提醒

  • 原因

  • 原来libcurl在configure默认配置编译的情况下,它是使用alarm+siglongjmp实现域名解析超时。当多个线程都使用超时处理的时候,同时主线程中有sleep或是wait等操作。libcurl将会发信号打断这个wait从而导致程序退出

  • 解决方法

  • *在设置curl属性时添加一条
  • curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
  • 这样域名解析就没了超时机制*

  • 官网说明
    **`CURLOPT_NOSIGNAL

Pass a long. If it is 1, libcurl will not use any functions that install
signal handlers or any functions that cause signals to be sent to
unix applications to still set/use all timeout options etc, without
risking getting signals. (Added in 7.10)

If this option is set and libcurl has been built with the standard
name resolver, timeouts will not occur while the name resolve
takes place. Consider building libcurl with c-ares support to enable
asynchronous DNS lookups, which enables nice timeouts for name
resolves without signals.

Setting CURLOPT_NOSIGNAL to 1 makes libcurl NOT ask the
system to ignore SIGPIPE signals, which otherwise are sent by the
system when trying to send data to a socket which is closed in the
other end. libcurl makes an effort to never cause such SIGPIPEs to
trigger, but some operating systems have no way to avoid them
and even on those that have there are some corner cases when
they may still happen, contrary to our desire. In addition, using
CURLAUTH_NTLM_WB authentication could cause a SIGCHLD
signal to be raised.`**

参考链接
http://www.xuebuyuan.com/126531.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/libinbin_1014/article/details/51659816

智能推荐

重采样、下采样、上采样三者之间的关系-程序员宅基地

重采样主要是分为上采样和下采样,在进行采样的过程中,需要注意采样的倍率的问题,并不是可以随意的改变采样率的大小的,根据采样定理:在进行模拟/数字信号的转换过程中,当采样频率大于信号中最高频率的2倍时,采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号是最高频率的5~10倍。采样定理又称奈奎斯特定理。采样频率:采样频率,也称为采样速度或者采样率,定义了每秒从连续信..._重采样

路由器漏洞复现分析第二弹:CNVD-2018-01084-程序员宅基地

1月17日,CNVD公开了D-LinkDIR 615/645/815 service.cgi远程命令执行漏洞(CNVD-2018-01084),freebuf上有前辈写了一篇漏洞复现和poc的文章(http://www.freebuf.com/new/160716.html)。在上一篇文章(http://www.freebuf.com/vuls/160040.html)里实际操作了一下用qem...

从功能实现的细节看SOA与OOA,以及SOA的优势何在_soa优势-程序员宅基地

我是个程序员,这是一篇从程序员角度来分析SOA与OOA的以实例为基础的文章,并非理论上YY。但仅代表我现阶段的观点。我觉得从这个观点出发理解的SOA对我个人架构变程是很有帮助的。希望您观后也有所收获,若您有不同的看法高见希望留下您的笔墨。这里分析的对象是user,一个在企业应用程序中非常常见得对象。我们围绕这个对象展开讨论,对比一下在OOA概念中与SOA概念中user及其相关功能的代码实现。_soa优势

各种编辑器的加强功能_qiangli editor 密码-程序员宅基地

浏览器插件Google翻译(中英文)Markdown Preview PlusGithub Tree点击view raw下载,然后安装划词翻译qiniu upload files七牛在线存图Vimreferencevim ~/.vimrcsyntax onset numberset tabstop=4set ex..._qiangli editor 密码

C语言第九章指针课后作业,C语言第九章指针习题-程序员宅基地

指针练习第九章 指针9.1 选择题[题9.1] 以下程序的运行结果是____。sub(int x,int y,int *z){*z=y-x;}main(){int a,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf(”%4d,%4d,%4d\n”,a,b,c);}A) 5,2,3 B)-5,-12,-7C)-5,-12...

随便推点

解决“使用anaconda切换不同版本的python后无法打开spyder”的问题_anaconda 更换python版本 spyder没生效-程序员宅基地

使用anaconda增加了python2.7的环境后,通过各种方式都无法启动spyder根据网上的方法,例如删除.matplotlib和.spyder、pip uninstall spyder等等,折腾了一个下午都没用绝望之后,开始自己找寻出路,没想到成功了!1.首先是在anaconda-home中将spyder手动移除;2.在python2.7的环境中安装spyder;..._anaconda 更换python版本 spyder没生效

测试人员 如何定位bug?-程序员宅基地

1、用户层面: 检查host、使用环境ping 或操作问题(浏览器缓存、fiddler工具影响等)2、web页面样式------观察样式是否与需求一致**3、F12----查看状态码 **​ 4XX 客户端问题, 比如发生了401,那么要看下是否带了正确的身份验证信息;发生了403则要看下是否 有权限访问;404则要看下对应的URL是否真实存在;​ 5xx服务端出现问题(配合服务器log...

window.open打开文件乱码-程序员宅基地

问题:刚开始使用window.open在IE兼容模式下打开文件下载出现乱码。一开始以为是文件名是中文导致的。然后使用a标签的download属性更改文件名解决。<a class="hide" id="lindUlr"></a>$("#lindUlr").attr("href", path);$("#lindUlr").attr("download", "1..._window.open访问文件,文件乱码

Android Studio3.0.1版本更新后遇到的问题-程序员宅基地

在更新 新版AndroidStudio3.0.1的时候(原来用的是2.1版本),遇到的两个问题,感觉有必要注明一下 问题一、编译时报错Error:Removing unused resources requires unused code shrinking to be turned on. 修改build.gradle文件,下面标红代码就是buildTypes { debu

nginx 学习笔记_nginx笔记-程序员宅基地

nginx 的组成部分:二进制可执行文件:由各模块源码编译出的一个文件,提供功能; nginx.conf 配置文件:控制 nginx 的行为; access.log 访问日志:记录每一条 http 请求 / 响应信息; error.log 错误日志:定位问题。..._nginx笔记

oracle 升降序,关于Oracle降序索引的定意及回溯_李day的博客-程序员宅基地

降序索引本质上是FBI,其具体定义可以通过 user_ind_expressions 或dba_ind_expressions 查询。那么同样的,降序索引只有在CBO下才能被使用。Connected to Oracle9i Enterprise Edition Release 9.2.0.4.0Connected as eygleSQL> create table t as select *...

推荐文章

热门文章

相关标签