2017-03-01 79 views
3

我正在使用libCURL對多部分HTTP響應中持續流數據響應的設備執行HTTP GET請求。在接收HTTP多部分流時libCURL超時

我想處理設備斷開連接/關閉或不能在網絡上到達的不幸但可能的情況。
默認libcurl的沒有幾秒鐘超時,因爲我需要,所以我嘗試:

  1. 在連接階段設置CURLOPT_CONNECTTIMEOUT選項,
    但這只是工作,而不是在已接收數據。

  2. 設置CURLOPT_TIMEOUT選項,
    但這似乎總是即使數據仍然收到了超時。

我的問題是:如何在上述情況下正確處理libCURL超時?

回答

2

爲您的方案,而不是

curl_easy_setopt(curl, CURLOPT_TIMEOUT, <your timeout in seconds>); 

使用

curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 1); 
curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, <your timeout in seconds>); 

上面兩行確保,如果平均速度低於每秒1個字節,在X秒的時間範圍內,那麼操作會中止(超時)。

參見reference here