curl / Mailing Lists / curl-library / Single Mail
Buy commercial curl support from WolfSSL. We help you work out your issues, debug your libcurl applications, use the API, port to new platforms, add new features and more. With a team lead by the curl founder himself.

DNS data not refreshed after CURLOPT_DNS_CACHE_TIMEOUT

From: Narasimha M via curl-library <curl-library_at_cool.haxx.se>
Date: Sun, 30 Aug 2020 00:10:09 +0530

Hi,

I am running a test application to periodically download a file from the
server.
Here I am creating an curl easy handle at once and using the same for all
the future downloads.
If I set CURLOPT_DNS_CACHE_TIMEOUT to 2 sec, I expect the application to
contact the DNS
server and resolve the name every 2 seconds. But I see that DNS requests
are sent only once for the
first time and never thereafter.

Curl version info:
curl-7.72.0.
c-ares is not used for test. (Even when the c-ares is used, result is the
same)
operating system: CentOS - 7

I check the DNS requests using tcpdump:
tcpdump -i interface port 53

Could someone explain if I am missing any thing?

Below is my code:
#include "curl.h"
#include <unistd.h>
#include <stdio.h>

static size_t cb(void *data, size_t size, size_t nmemb, void *userp)
{
  printf("Got data :%u\n",size);
  size_t realsize = size * nmemb;
  return realsize;
}

static void download(CURL* curl,int i)
{
  if(curl) {
    CURLcode res;
    curl_easy_setopt(curl, CURLOPT_DNS_CACHE_TIMEOUT,2);
    curl_easy_setopt(curl, CURLOPT_URL, "google.com");

    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cb);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)0);

    // curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

    res = curl_easy_perform(curl);
    if (res== CURLE_OK)
    {
      printf("(%u) Curl get success\n",i);
    }
    else
    {
      printf("(%u) Curl get failed\n",i);
    }
  }
  printf("_______________________\n");
}

static void get(CURL* curl, int loop, int pause)
{
  int i;
  for(i=0; i<loop; i++)
  {
    download(curl,i);
    sleep(pause);
  }
}

int main()
{
  curl_global_init(CURL_GLOBAL_DEFAULT);
  CURL *curl = curl_easy_init();
  get(curl, 100, 1);
  curl_easy_cleanup(curl);
}

Thanks,
Narasimha

-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette: https://curl.haxx.se/mail/etiquette.html
Received on 2020-08-29