前几天同事的程序有个很奇怪的bug,跟大家分享一下。
描述如下:一个http接口在测试环境下能够正常访问,在外网环境下就会直接超时,并且超时的消耗是建是0ms。
我strace了一下,libcurl在测试环境能正常发包,在外网环境却总是直接返回,连连接都没有尝试建立。

仔细研究了他的代码,发现并没有什么不合理之处,一筹莫展时发现有如下代码:

突然想起之前有文章说curl只支持秒级的超时时间,而我们外网的超时配置的是0.5秒。
把超时时间改成1秒之后,果然一切正常了。

google上搜了一下,在如下链接找到了答案:
http://stackoverflow.com/questions/1856473/why-would-curl-ignore-curlopt-timeout-ms-but-honor-curlopt-timeout

看了一下外网curl的版本:

果然是低于7.16.2。

问题到这里算是解决了,但是还有一个很奇怪的地方,就是我们测试环境的curl版本也是7.15.1,但是配置0.5秒用起来却没有任何问题。当然唯一不同的是,外网是64位,测试环境是是32位而已。

但是不管怎样,以后在curl中使用小于一秒的超时时,还是多加小心为妙。

libcurl的使用总结(二)

本篇主要是一些使用示例,由于部分代码是来源网上,原作者已经无法考证,所以如有原作者看到,可以告诉我,我给注明~ 上一篇链接–libcurl的使用总结(...

阅读全文

libcurl的使用总结(一)

最近的项目中由于要在C++代码中调用PHP的URL,所以不得不借助libcurl这个库,由于第一次用,所以很多地方很是纠结,特此写在这里,方便给同样刚入门的朋友指...

阅读全文

2则回应给“关于libcurl不发包的bug定位”

  1. heiher说道:

    可能是测试环境的curl打过补丁吧。

    [回复]

    nemozhang 回复:

    测试环境也不发包哈。(后来发现测试陪的超时时间是1.5秒 )
    :)

    [回复]

发表评论