久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

libcurl中curl

 碼農(nóng)書館 2020-09-03

Don’t Live with Broken Windows
不要容忍破窗

Andrew Hunt/David Thomas進程員修煉之道

Libcurl為一個免費開源的,,客戶端url傳輸庫,,本文主要分析使用過程中遇到的卡死問題,。

問題描述

LibCurl使用阻塞的方式來進行http下載,curl_easy_perform執(zhí)行后,,進程會在這里阻塞等待下載結(jié)束(成功OR失?。藭r若下載一段時間后出現(xiàn)網(wǎng)絡(luò)異常,,curl_easy_perform不會返回失敗,,整個線程阻塞卡死。

問題分析

復(fù)現(xiàn):連接無線網(wǎng)絡(luò),,然后執(zhí)行curl_easy_perform下載,,下載過程中,斷開無線網(wǎng)絡(luò),,curl_easy_perform卡死,,阻塞整個線程。

原因:當(dāng)斷開無線網(wǎng)絡(luò)時,,使用命令行netstat ano | findstr ‘連接ip’, 可以發(fā)現(xiàn)LibCurl的http連接并沒有斷開(不知道是不是windows系統(tǒng)的bug),,如果將CURLOPT_TIMEOUT設(shè)置為無限等待,curl_easy_perform便會一直阻塞住線程,。

解決方案

1,、如果我們不將CURLOPT_TIMEOUT設(shè)置為無限等待,是不會出現(xiàn)上面問題,,curl_easy_perform會在執(zhí)行一段時間(由CURLOPT_TIMEOUR設(shè)置),,結(jié)束并返回失敗,但是如果設(shè)置合適的CURLOPT_TIMEOUT是個問題,。

1
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 0); /* blocking forever, cannot find a suitable value */

2,、使用multi模式下載, 而不使用easy模式, 此方法的唯一好處就是multi并不會阻塞, 而是立即返回. 但是缺點是帶來了問題, 其一就是需要自己去阻塞, 當(dāng)我們需要返回時再返回, 其二還需要啟動一個線程, 需要自己控制整個過程的節(jié)奏。

3,、在下載中, 另起一個線程, 若發(fā)現(xiàn)下載狀態(tài)卡死(可以通過定期檢查文檔大小來實現(xiàn)), 則從外部中斷下載線程. 此方法需另起線程, 而且直接中斷線程, 會給整個進程帶來不穩(wěn)定,。

4、設(shè)置CURLOPT_TIMEOUT為30s,,以30s為間隔斷點續(xù)傳。

5,、使用CURLOPT_LOW_SPEED_LIMIT, CURLOPT_LOW_SPEED_TIME

1
2
res = curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 1024L);
res = curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, 30L);

6,、使用CURLOPT_PROGRESSFUNCTION設(shè)置進度表回調(diào)函數(shù),可以在該回調(diào)函數(shù)內(nèi)部檢測下載是否出錯,,如果出現(xiàn)就中斷curl_easy_perform,,返回下載錯誤。

1
2
3
#include <curl/curl.h>
int progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow);
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROGRESSFUNCTION, progress_callback);

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多