代码之家  ›  专栏  ›  技术社区  ›  341008 Sylvain

cURL:空闲超时间隔超过指定值

  •  5
  • 341008 Sylvain  · 技术社区  · 14 年前

    我在用 libcurl 创建到服务器的http连接。在初始化期间,我指定了一个5秒的空闲超时值,并将其指定为进度回调函数。我原以为cURL会在5秒的不活动后终止连接,并停止调用进程回调,但我发现cURL在大约15秒后超时。为什么curl的超时时间比我指定的要长?将超时设置为更大的值没有帮助。如果指定100秒,则在105秒不活动后超时。

    code = s_curl_easy_setopt(m_curl_handle, CURLOPT_NOPROGRESS, 0);
    assert(code == CURLE_OK);
    code = s_curl_easy_setopt(m_curl_handle, CURLOPT_PROGRESSFUNCTION, progress_callback);
    assert(code == CURLE_OK);
    

    //this will set the timeout for quitting in case the network goes down
    code = s_curl_easy_setopt(m_curl_handle, CURLOPT_LOW_SPEED_LIMIT, 1);
    code = s_curl_easy_setopt(m_curl_handle, CURLOPT_LOW_SPEED_TIME, m_idle_timeout);
    
    2 回复  |  直到 14 年前
        1
  •  7
  •   341008 Sylvain    14 年前

    我已经想好了。CURL大约每秒更新一次。要计算空闲超时,cURL计算6次更新的平均字节/秒,并将其与 CURLOPT_LOW_SPEED_LIMIT CURLOPT_低速限制 超过 CURLOPT_LOW_SPEED_TIME 一连几秒,它都会超时。所以如果 是5秒,cURL将计算过去6次进度更新(大约5秒)的平均字节/秒,然后检查它是否小于 CURLOPT_低速限制

        2
  •  0
  •   Brad    14 年前

    (1) PROGRESSFUNCTION上的Libcurl文档说:

    此函数由libcurl调用 在 操作(大约每秒一次或 是否转移。

    (2) 你指的是什么“超时”?我唯一能找到的和 连接 超时,这与在建立连接后终止连接无关,并且没有发送数据-正如您所暗示的那样。