cURL / Mailing Lists / curl-library / Single Mail


Re: Re: [curl 4/5] dns: Support binding DNS to local interface/IP

From: Ning Dong <>
Date: Thu, 26 Aug 2010 09:41:49 +0800

Providing APIs to control DNS server is a great idea especially in China.
In China, most people access internet with some stupid DNS servers provided by some more stupid telecomm companies.
These DNS servers failed to resolve domain name frequently without any reason, but even worse, they response a IP of a telecomm server when resolving fail.
So, I've already add such option in my curl lib.
Ning Dong

发件人:Ben Greear
发送日期:2010-08-26 07:49:22
收件人:libcurl development
主题:Re: [curl 4/5] dns: Support binding DNS to local interface/IP

On 07/22/2010 03:14 PM, Ben Greear wrote:
> On 07/22/2010 02:43 PM, Daniel Stenberg wrote:
>> On Mon, 19 Jul 2010, Ben Greear wrote:
>>> + /* Set the DNS servers for c-ares to use.
>>> + * comma separated list of host[:port] entries.
>>> + */
>> Some comments:
>> I'm very curious. What is the specific use-case for this? We're working
>> really hard at making the name resolving done resolver-agnostic and here
>> you all of a sudden no longer provide the name servers using the generic
>> /etc/resolv.conf or similar but instead control them directly within
>> libcurl.
> We make network testing software. I can currently run dhcp on several
> different interfaces and get the IP, mask, gateway, and DNS info. I
> want to run a libcurl app on each interface and use potentially unique
> DNS. This allows users to connect one interface to one network,
> and another to another, and to use the DNS servers that belong to
> that particular network.

I wanted to follow up to see where this stands. I know I still need
docs, but I want to make sure you are happy with the API before
I write docs for it....


> It might allow a more 'normal' user to test some particular DNS
> server w/out mucking with /etc/resolv.conf. This might be particularly
> useful for users who do not have root privs.
> If users don't set these options, then the default values in
> /etc/resolv.conf
> will be used, of course.
> If there are other name resolver backends (aside from c-ares) that
> folks want to use in this manner, I guess they'll need to add appropriate
> API and then tie in curl near where I did the c-ares hooks).
>> Do we really need _three_ options to set outgoing interface for DNS
>> queries when we manage with _one_ for the ordinary TCP connection? I
>> would much rather have the DNS resolves use the same logic and concept
>> as CURLOPT_INTERFACE. Thoughts on that?
> First, the TCP connection in curl needs to be updated to take
> both interface-name and IP. But, we can do so with one ascii
> string and parse it apart. This is on my list of things to do,
> and I hope to get a patch posted by next week.
> I could do similar with DNS if you want, but it will add more
> parsing code to libcurl, which adds bloat and complexity in my
> opinion.
> Since a user might want to use IPv4 for one DNS server and IPv6 for
> another,
> and do use them round-robin, I think we will still need to provide ipv4 and
> ipv6 binding API, not just one API that can take either ipv6 or ipv4.
>> In regards to all your suggested options, I miss the docs for them in
>> your patch. Unfortunately, I realize adding decent test cases for them
>> is very tricky.
> I see no way to write useful automated tests for this, but we do
> testing on our code that uses this..and it seems to work as
> designed. If it doesn't, it's most likely a c-ares bug anyway
> since the curl part of this is pretty minimal.
> As for docs, I'll post a patch for curl_easy_setopt.3
> as soon as we agree on the API.
> Thanks,
> Ben

Ben Greear <>
Candela Technologies Inc

List admin:
List admin:
Received on 2010-08-26