2011-05-22 416 views
3

我正在使用libcurl与Twitter和Identi.ca进行通信。只要我的连接不忙,一切都可以正常工作。但是,如果我正在下载一个大文件,curl会在5秒后请求超时。libcurl - 5秒后奇怪的超时

我给自己定的卷曲处理好以下几个选项:

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

'curl_easy_perform()'的返回值是什么? – 2011-05-22 10:18:33

+1

@Linus,我已经更新了主帖:) – Kazade 2011-05-22 10:33:52

+0

该文件也反对['CURLOPT_NOSIGNAL'](http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTNOSIGNAL),也许这需要也被设置? – 2011-05-22 10:37:28

回答

1

我会说这是因为二分之一的原因:

  1. 你不要在这里向我们展示了完整的程序,让你拥有一个设置的超时选项指示libcurl超时。

  2. 您的libcurl版本有一个错误的bug。你没有在你使用的平台上说哪个libcurl版本。

得到非常好的帮助,提供对重复的公开网址的问题完整源代码。

0

独立卷曲程序是否成功下载该文件?如果没有,可能会有5秒的请求超时限制服务器端。

你应该仍然能够以块的形式下载文件。首先抢头拉文件的大小,然后使用以下选项的文件拉到每块:

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

一旦你把所有的碎片,将它们串联在一起,你应该有你完整的文件。