关于libcurl不发包的bug定位
浏览:3066次 出处信息
前几天同事的程序有个很奇怪的bug,跟大家分享一下。
描述如下:一个http接口在测试环境下能够正常访问,在外网环境下就会直接超时,并且超时的消耗是建是0ms。
我strace了一下,libcurl在测试环境能正常发包,在外网环境却总是直接返回,连连接都没有尝试建立。
仔细研究了他的代码,发现并没有什么不合理之处,一筹莫展时发现有如下代码:
1 2 |
curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, (int)(timeout_sec*1000)); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, (int)(timeout_sec*1000)); |
突然想起之前有文章说curl只支持秒级的超时时间,而我们外网的超时配置的是0.5秒。
把超时时间改成1秒之后,果然一切正常了。
google上搜了一下,在如下链接找到了答案:
The version of curl I am using (7.15.5) doesn\'t support CURLOPT_TIMEOUT_MS. According to Greg I need at least 7.16.2.
看了一下外网curl的版本:
user_00@RS_Server_appsupport:~> curl --version curl 7.15.1 (x86_64-suse-linux) libcurl/7.15.1 OpenSSL/0.9.8a zlib/1.2.3 libidn/0.6.0 Protocols: tftp ftp gopher telnet dict ldap http file https ftps Features: IDN IPv6 Largefile NTLM SSL libz
果然是低于7.16.2。
问题到这里算是解决了,但是还有一个很奇怪的地方,就是我们测试环境的curl版本也是7.15.1,但是配置0.5秒用起来却没有任何问题。当然唯一不同的是,外网是64位,测试环境是是32位而已。
$ curl --version curl 7.15.1 (i686-suse-linux) libcurl/7.15.1 OpenSSL/0.9.8a zlib/1.2.3 libidn/0.6.0 Protocols: tftp ftp gopher telnet dict ldap http file https ftps Features: IDN IPv6 Largefile NTLM SSL libz
建议继续学习:
- libcurl的使用总结(二) (阅读:13871)
- iPhone下的libcurl with SSL for iOS (阅读:5020)
- libcurl中使用curl_easy_getinfo 产生段错误分析 (阅读:4158)
- libcurl的使用总结(一) (阅读:3290)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:如何设置一个严格30分钟过期的Session
后一篇:PHP的历史 >>
文章信息
- 作者:Dante 来源: Vimer
- 标签: libcurl
- 发布时间:2012-01-16 00:05:05
建议继续学习
近3天十大热文
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [52] 如何拿下简短的域名
- [52] android 开发入门
- [52] 图书馆的世界纪录
- [50] Oracle MTS模式下 进程地址与会话信
- [50] Go Reflect 性能
- [48] 【社会化设计】自我(self)部分――欢迎区
- [47] 读书笔记-壹百度:百度十年千倍的29条法则
- [37] 程序员技术练级攻略
- [28] 视觉调整-设计师 vs. 逻辑