2011-05-22 409 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)); 

一旦你把所有的碎片,將它們串聯在一起,你應該有你完整的文件。