【发布时间】: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 创建时的相同状态。”所以,我会说你需要重置它。