2013-01-25 200 views
1

我正在使用libcurl從客戶端下載一些文件到服務器。我已在我的捲曲連接下列選項中,cURL超時問題

curl_easy_setopt(curlPtr, CURLOPT_LOW_SPEED_LIMIT, 1); 
curl_easy_setopt(curlPtr, CURLOPT_LOW_SPEED_TIME, 360); 
curl_easy_setopt(curlPtr, CURLOPT_IGNORE_CONTENT_LENGTH, 1); 
curl_easy_setopt(curlPtr, CURLOPT_TCP_NODELAY, 1); 

即使我已經設定了,如果6分鐘(360秒),操作被超時就算我收到的響應沒有收到字節時間,

這是我從該接收到的捲曲調試響應,

  • 操作超時後360000毫秒205512個字節接收
  • 截止連接#0
  • 超時達到

我已經重定向到文件的響應,我可以確認的響應字節。但是,操作在達到6分鐘後仍然會超時。

任何人都可以幫助我在上面有什麼我錯了嗎?

注意我正在使用libcurl 7.19.3。我不能立即升級,但我們有計劃升級到最新的穩定版本。

感謝, Prabu

+0

服務器可能會爲您計時並關閉連接(您可以在客戶端上做些什麼來阻止連接)。如果沒有數據流向服務器,服務器會斷開連接(攻擊者可能會啓動DOS攻擊,並最終使用所有可用連接最終打開許多與服務器的連接),這將是一個安全漏洞。 –

+0

你會得到任何HTTP代碼> –

+0

PS:傳遞給curl_easy_setopt的大多數(整數)值應該是long。你正在傳遞整數。這可能是未來的一個問題。使用'curl_easy_setopt(curlPtr,CURLOPT_LOW_SPEED_TIME,360L);' –

回答

0

沒有出現錯誤的,你只發布4線。

默認情況下,CURLOPT_TIMEOUT和CURLOPT_TIMEOUT_MS值爲0. 但是,如果您使用特定的curl實現,請嘗試在代碼中將這些選項傳遞給0。

如果它沒有改變任何東西,那是因爲它是Web服務器上的超時。所以如果你沒有這臺服務器的控制權,你什麼都不能做。您必須使用循環創建程序才能重新啓動連接。