2013-01-25 161 views
1

我正在使用libcurl从客户端下载一些文件到服务器。我已在我的卷曲连接下列选项中,cURL超时问题

curl_easy_setopt(curlPtr, CURLOPT_LOW_SPEED_LIMIT, 1); 
curl_easy_setopt(curlPtr, CURLOPT_LOW_SPEED_TIME, 360); 
curl_easy_setopt(curlPtr, CURLOPT_IGNORE_CONTENT_LENGTH, 1); 
curl_easy_setopt(curlPtr, CURLOPT_TCP_NODELAY, 1); 

即使我已经设定了,如果6分钟(360秒),操作被超时就算我收到的响应没有收到字节时间,

这是我从该接收到的卷曲调试响应,

  • 操作超时后360000毫秒205512个字节接收
  • 截止连接#0
  • 超时达到

我已经重定向到文件的响应,我可以确认的响应字节。但是,操作在达到6分钟后仍然会超时。

任何人都可以帮助我在上面有什么我错了吗?

注意我正在使用libcurl 7.19.3。我不能立即升级,但我们有计划升级到最新的稳定版本。

感谢, Prabu

+0

服务器可能会为您计时并关闭连接(您可以在客户端上做些什么来阻止连接)。如果没有数据流向服务器,服务器会断开连接(攻击者可能会启动DOS攻击,并最终使用所有可用连接最终打开许多与服务器的连接),这将是一个安全漏洞。 –

+0

你会得到任何HTTP代码> –

+0

PS:传递给curl_easy_setopt的大多数(整数)值应该是long。你正在传递整数。这可能是未来的一个问题。使用'curl_easy_setopt(curlPtr,CURLOPT_LOW_SPEED_TIME,360L);' –

回答

0

没有出现错误的,你只发布4线。

默认情况下,CURLOPT_TIMEOUT和CURLOPT_TIMEOUT_MS值为0. 但是,如果您使用特定的curl实现,请尝试在代码中将这些选项传递给0。

如果它没有改变任何东西,那是因为它是Web服务器上的超时。所以如果你没有这台服务器的控制权,你什么都不能做。您必须使用循环创建程序才能重新启动连接。