Linux cURL:空闲超时间隔大于指定值

Linux cURL:空闲超时间隔大于指定值,linux,curl,timeout,Linux,Curl,Timeout,我正在使用libcurl创建到服务器的http连接。在初始化过程中,我指定了5秒的空闲超时值,还指定了进程回调函数。我希望cURL在5秒不活动后中止连接并停止调用进度回调,但我发现cURL在大约15秒后超时。为什么curl超时的时间比我指定的要长?将超时设置为更大的值没有帮助。如果我指定100秒,它将在105秒不活动后超时 code = s_curl_easy_setopt(m_curl_handle, CURLOPT_NOPROGRESS, 0); assert(code == CURLE_O

我正在使用
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);
(1) PROGRESSFUNCTION上的Libcurl文档说:

此函数由libcurl调用 而不是它的内部等价物 以频繁的间隔 操作(大约每秒一次或 (更快)无论数据是否正在 是否转移


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

我已经解决了这个问题。cURL大约每秒更新一次进度。要计算空闲超时,cURL计算6次更新的平均字节数/秒,并将其与
CURLOPT\u LOW\u SPEED\u LIMIT
进行比较。如果此值连续小于
CURLOPT\u LOW\u SPEED\u LIMIT
超过
CURLOPT\u LOW\u SPEED\u TIME
秒,则超时。因此,如果
CURLOPT\u LOW\u SPEED\u TIME
为5秒,cURL将计算过去6次进度更新(约5秒)的平均字节/秒,然后检查它是否小于
CURLOPT\u LOW\u SPEED\u LIMIT
至少5秒,因此总时间约为10秒