c++ - 接收 HTTP 多部分流时 libCURL 超时

标签 c++ timeout libcurl

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

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

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

  2. 设置 CURLOPT_TIMEOUT选项,
    但这似乎总是强制超时,即使仍在接收数据也是如此。

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

最佳答案

对于你的场景而不是

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>);

以上两行确保如果平均速度在 X 秒的时间范围内下降到每秒 1 个字节以下,则操作将中止(超时)。

参见 reference here .

关于c++ - 接收 HTTP 多部分流时 libCURL 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42529881/

相关文章:

c# - 如何从Windows系统中彻底删除文件

html - 防止接收大量数据时浏览器超时

sql - SSDT 发布超时

php - 无法在 ubuntu 16.10 上再次安装 php5.6-curl。添加了ppa。

c++ - 在 C++ 中使用 libcurl 在 Linux 上使用变量设置绝对路径

c++ - 在 Vector Container 中使用 placement new

c++ - regsvr32 导致 CDatabase destrucor 在使用 SQL Native Client (v2005) 时挂起

c++ - libcurl 是否单次加载完整页面?

c++ - 如何在派生类中创建与基类同名的函数

Haskell——Rand monad 中的计算超时