我正在使用libCURL对设备进行HTTP GET请求,该设备在多部分HTTP响应中以连续的数据流进行响应。
我想处理设备断开/关闭或网络上无法再访问的不幸但可能的情况。
默认情况下,libCURL没有我需要的几秒超时,所以我尝试了:
设置CURLOPT_CONNECTTIMEOUT选项,
但这仅适用于连接阶段,而不是已经接收数据。
设置CURLOPT_TIMEOUT选项,
但即使仍然收到数据,这似乎总是 强制 超时。
我的问题是:在上述情况下,如何使用libCURL正确处理超时?
答案 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。