接收HTTP多部分流时libCURL超时

时间:2017-03-01 10:58:03

标签: c++ timeout libcurl

我正在使用libCURL对设备进行HTTP GET请求,该设备在多部分HTTP响应中以连续的数据流进行响应。

我想处理设备断开/关闭或网络上无法再访问的不幸但可能的情况。
默认情况下,libCURL没有我需要的几秒超时,所以我尝试了:

  1. 设置CURLOPT_CONNECTTIMEOUT选项,
    但这仅适用于连接阶段,而不是已经接收数据。

  2. 设置CURLOPT_TIMEOUT选项,
    但即使仍然收到数据,这似乎总是 强制 超时。

  3. 我的问题是:在上述情况下,如何使用libCURL正确处理超时?

1 个答案:

答案 0 :(得分:1)

对于您的方案,而不是

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