libcurl - 5秒后出现奇怪的超时

时间:2011-05-22 10:08:53

标签: c++ c curl timeout libcurl

我正在使用libcurl与Twitter和Identi.ca进行通信。只要我的连接不忙,一切都很完美。但是如果我正在下载一个大文件,那么curl会在5秒后请求超时。

我在curl句柄上设置了以下选项:

curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 60);
curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, 15);

并且他们没有任何区别,curl_easy_perform()总是在5秒后返回。 CURLINFO_RESPONSE_CODECURLINFO_HTTP_CONNECTCODE值始终为零。

有什么想法吗?我需要设置其他任何超时,还是有任何原因导致上述内容无法生效?

编辑:curl_easy_perform的返回值为CURLE_OPERATION_TIMEDOUT

2 个答案:

答案 0 :(得分:1)

我想这是因为有两个原因:

  1. 你没有在这里向我们展示完整的程序,所以你在其他地方有一个设置超时选项,指示libcurl超时。

  2. 你的libcurl版本有一个错误,它会导致行为异常。您没有说明您正在使用哪个平台上的libcurl版本。

  3. 要获得真正好的帮助,请提供完整的源代码,以便针对公共网址重复此问题。

答案 1 :(得分:0)

独立卷曲程序是否成功下载了该文件?如果不是,则服务器端可能存在5秒请求超时限制。

您仍然可以以块的形式下载文件。首先抓住HEAD并拉出文件的大小,然后使用以下选项拉出文件的每个块:

curl_easy_setopt(curl, CURLOPT_BINARYTRANSFER, 1);
curl_easy_setopt(curl, CURLOPT_RANGE, start_range + "-" + (start_range + chunk_size));

一旦掌握了所有部分,将它们连接在一起就可以获得完整的文件。