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.

Re: Regarding Async DNS resolver

From: Daniel Stenberg via curl-library <>
Date: Wed, 17 Jul 2019 00:43:19 +0200 (CEST)

On Tue, 16 Jul 2019, Amit wrote:

>> I don't actually advocate using 100ms all the time. It needs to be shorter
>> at first and then increase over time. curl_multi_timeout() return such
>> timeouts.
> Thanks, will use curl_multi_timeout() instead of fixed 100 msec
> timer.

Just note that curl_multi_timeout() only started to return those suitable
timeouts during the threaded name resolver in 7.60.0, so in earlier versions
you need to do that yourself.

> why do you think notifying DNS-completed in resolver thread is a bad idea ?

Because it would be surprising to applications (since no callbacks in libcurl
is ever called from another thread) and introduce the typical threading issues
requiring mutexes, locks etc and risk causing race conditions in the app.

> Anyways, application would be handling that DNS-completed event in CURL
> thread context.

If you call libcurl from thread A and the callback comes from thread B (that
curl itself created), then surely those are not using the same thread

>> The *better* fix would be to instead use a pipe/sockpair to signal that the
>> name resolve is complete and then have the application be able to wait on
>> that.

> Are you suggesting that let CURL internally create pipe/socket pair for DNS
> resolution and application wait on the same fd ?

I'm suggesting that would be one way to offer a solution.

> And on DNS resolution, CURL will write to the pipe, which will cause
> application thread to wake up and application can trigger the CURL to resume
> the connection ?


> Regarding your concern on Windows, I am not sure about the CURL development
> process, but since I am working on linux, would like to know if It if okay
> to implement it only for linux ? If you are fine, then I can explore more in
> this direction.

Sure, a solution that only works for non-Windows is totally fine, as Windows
users could then either just remain the current method or a Windows developer
could work on providing the corresponding solution for that platform.

  / | Get the best commercial curl support there is - from me
                   | Private help, bug fixes, support, ports, new features
Received on 2019-07-17