【问题标题】:How to use CURLOPT_DNS_CACHE_TIMEOUT with shared DNS cache如何将 CURLOPT_DNS_CACHE_TIMEOUT 与共享 DNS 缓存一起使用
【发布时间】:2014-09-14 09:50:21
【问题描述】:

我正在使用自己的 CURL 简单句柄池,在多线程应用程序中重用 - 目标是重用 TCP 连接和 DNS 查找。每次将句柄返回到池时,都会在该句柄上调用 curl_easy_reset

目前,我的实现为每个 CURL 轻松句柄使用单独的本地 DNS 缓存。我正在使用 CURL 共享接口和共享 DNS 缓存,它似乎工作得很好,但我不明白设置 DNS 缓存超时的正确方法是什么?

DNS 缓存超时设置在 CURL 简易句柄上,但缓存是共享的。每次从池中获取句柄时我是否需要设置超时(因为之前调用了重置)或者缓存超时只设置一次并记住直到我更改它?

【问题讨论】:

    标签: c++ c linux curl dns


    【解决方案1】:

    超时值实际上是按简单句柄存储和使用的。因此,每个简单句柄都有自己的超时值,即使共享 DNS 缓存也是如此。因此,每个简单句柄都会逐出一个太旧的条目并根据自己的值重新解析一个名称。

    当您为简单句柄设置超时值时,该超时值将“坚持”并一直使用,直到您再次将其设置为其他值。 (与所有其他选项一样。)

    在句柄上调用 curl_easy_reset() 当然会将句柄的超时值重置为其内部默认值。

    【讨论】:

    • 不应该将我的超时值重置为默认值吗?无论如何,这主要是我在测试期间看到的。看起来每个句柄仍然维护自己的 DNS 缓存,并且仅在本地条目过期或访问新服务器时才与全局缓存同步。
    • 对,我现在在答案中添加了重置信息。句柄真正共享缓存的单个实例,共享时它们不使用自己的。
    • 谢谢。这是有道理的,我错误地解释了我的日志输出。顺便提一句。您知道是否存在共享接口中的全局 DNS 缓存被共享访问而不是单一访问锁定的情况?我有多个句柄访问同一服务器。我希望第一个句柄使用单一访问级别来填充缓存,而所有其他句柄都使用共享访问级别来获取缓存的 DNS 条目,但它们一直都使用单一访问级别。
    • 从不使用共享访问锁。我首先根据这个想法设计了锁定概念和 API,但我们从未达到(或有足够的精力/时间)发现对它有用的地步。
    猜你喜欢
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 2022-07-31
    • 2013-06-02
    • 1970-01-01
    相关资源
    最近更新 更多