Hi! We use libcurl in a project to handle >10K HTTP requests/second using multi interface via curl-asio C++ wrapper (https://github.com/mologie/curl-asio). If default threaded DNS resolver is used, curl_easy_init() is very fast; however, if I switch to c-ares, curl_easy_init() stucks in reading local files inside of ares_init_options().
An example stack trace is as following: 0 read () at ../sysdeps/unix/syscall-template.S:81 1 _IO_new_file_underflow (fp=0x7f05bc1e4060) at fileops.c:613 2 __GI__IO_file_xsgetn (fp=0x7f05bc1e4060, data=<optimized out>, n=31) at fileops.c:1418 3 __GI__IO_fread (buf=<optimized out>, size=1, count=31, fp=0x7f05bc1e4060) at iofread.c:42 4 ares_init_options () 5 Curl_resolver_init () 6 Curl_open () 7 curl_easy_init () 8 curl::easy::init (this=0x7f05bc1e3f28) +504 9 curl::easy::easy (this=0x7f05bc1e3f28, multi_handle=...) +36 So, when I try to create easy handle and use it in async way, ares still does pretty much synchronous actions. AFAICS, there is no option to disable re-reading of /etc/resolv.conf, /etc/hosts, etc. Is it a deliberate decision to read these files synchronously? Is it possible to use c-ares in libcurl and not to do any sync i/o in a client thread? ------------------------------------------------------------------- Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library Etiquette: https://curl.haxx.se/mail/etiquette.html
