0%

libcurl: transferred a partial file

用libcurl下载大文件时总是未完成就断开,报错"transferred a partial file",但用浏览器直接下载是没问题的,网上找了一会也没找到直接对应的资料,研究了一下发现应该是keep-alive的问题,因为下载大文件耗时比较长,libcurl没有进行keep-alive的话,还没下载完就被服务器断开连接了。 加入下面几行代码即可解决:

1
2
3
4
5
6
/* enable TCP keep-alive for this transfer */
curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
/* keep-alive idle time to 120 seconds */
curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
/* interval time between keep-alive probes: 60 seconds */
curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);