libcurl斷點下載遇到的問題


最近游戲把資源(圖片、配置、lua)的加載、更新全部改了 ,加載其實還好,就是不走之前的zip解壓方式。

 

以前的大體流程:

下載 –> 啟動 –> 解壓 –> 更新 –> 進入游戲

現在的大體流程:

下載 –> 啟動 –> 更新 –> 進入游戲

 

之前使用散文件gzip方式更新,現在換成下載zip包(斷點下載)

 

在改動完成之后准備提交appstore,結果崩潰的發現在某些設備上debug可以正常更新、release就始終有問題,一直失敗。后來在mac上安裝了http的抓包工具:HttpScope。發現在head請求之后就不再繼續走下去了,然后就猜測是否因為release的原因,導致寫入文件時遇到權限問題了,然后就打log,重新生成release包測試…

 

最后定位到的問題是,head請求始終返回的是0,代碼是這樣寫的:

m_pUrlHandle = curl_easy_init();

double dSize = 0.0f;
curl_easy_setopt(m_pUrlHandle, CURLOPT_URL, m_strRemoteFileUrl.c_str());
curl_easy_setopt(m_pUrlHandle, CURLOPT_HEADER, 1);
curl_easy_setopt(m_pUrlHandle, CURLOPT_NOBODY, 1);
if (curl_easy_perform(m_pUrlHandle) == CURLE_OK) {
curl_easy_getinfo(m_pUrlHandle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &dSize);
} else {
dSize = 0.0f;
}

curl_easy_cleanup(m_pUrlHandle);
m_pUrlHandle = NULL;

改動就是去掉curl_easy_setopt(m_pUrlHandle, CURLOPT_HEADER, 1);

 

默認CURLOPT_NOPROGRESS為開啟的

CURLOPT_NOSIGNAL我也設置過,沒用。CURLOPT_HEADER如果打開,它會將頭信息輸出在body中,會不會是因為沒有設置CURLOPT_WRITEFUNCTION函數引起的問題呢?

 

仔細查curl的官方文檔http://curl.haxx.se/libcurl/c/CURLOPT_WRITEFUNCTION.html,有這樣的發現:

 

也就是如果沒有設置CURLOPT_WRITEFUNCTION,那它會調用默認的fwrite方法,那它的路徑會是什么呢?不清楚,上面也沒寫,所以就有可能導致寫入失敗,從而導致得到的size始終為0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM