【问题标题】:Curl easy handle not able to resolve host after ~10 minutes of inactivity?闲置约 10 分钟后,Curl 简易手柄无法解析主机?
【发布时间】:2018-06-03 22:28:24
【问题描述】:

我已经使用curl_easy_init() 初始化了curlHandle 并设置了一些选项,例如。 url、请求类型、超时时间、ssl验证等

我读到重复使用相同的 curlHandle 可以提高性能,并且编写的示例代码也很少,这恰好是真的。

所以我在我的类的构造函数中初始化了一次句柄,然后每次只更改标头或请求时都重新使用相同的句柄,但是如果我不使用 curlHandle 10 分钟然后如果我尝试重用它引发无法解析主机的异常。

您可以使用curlHandle 有时间限制吗? 因为我在任何 SO 问题或 curl 文档中都没有看到任何这样的提及。 还是在某些超时后您必须再次执行curl_easy_init()

[编辑]

我正在使用 wolfSSL 与 cURL 进行 SSL 通信。

默认情况下 session-id 缓存在 wolfSSL 中被禁用并在 curl 中启用 因为CURLOPT_SSL_SESSIONID_CACHE 默认为 1。

会话 ID 在 500 秒(大约 8 分钟)不活动后超时,而 cURL 尝试重用相同的会话 ID。 这导致 wolfSSL 的SSL_set_session 失败,这会导致 curl 在 8-10 分钟不活动后失败。

使用的卷曲版本 7.49.1

【问题讨论】:

  • 您是否测试过 HTTP 服务器超时,例如使用telnet?如果您不活动,服务器可能会断开您的连接。
  • 我怀疑..这就是我无法再次拨打电话的原因...
  • 假设服务器在 10 分钟不活动后断开我的连接,我是否需要重置句柄才能再次连接?
  • 如果服务器断开您的连接,则套接字将关闭,必须创建另一个套接字并连接。 curl_easy_reset() 描述说它“将句柄恢复到刚使用 curl_easy_init 创建时的相同状态。”所以,我会说你需要重置它。

标签: c++ curl https libcurl


【解决方案1】:

不,curl 句柄没有时间限制,不,它不应该在闲置十分钟或更长时间后导致任何特定错误。如果您可以使用最新版本的 libcurl 重现此问题,则可能是一个错误...

【讨论】:

  • 我修改了问题,增加了失败的详细分析。这是 curl 的预期行为还是真正的问题?
  • 是的...看起来一样...将使用最新版本进行全面测试...如果仍然能够重现将在 curl 的 github 页面中提交缺陷...感谢您的回复跨度>
猜你喜欢
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 2011-05-20
  • 2021-12-18
相关资源
最近更新 更多