归档 2012年1月11日

最后更新于 .


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

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


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


The version of curl I am using (7.15.5) doesn't support CURLOPT_TIMEOUT_MS. According to Greg ...

昨天

2012年1月9日

明天

2012年1月29日

归档