On Fri, 5 Nov 2010, Dan Fandrich wrote:

$ ./src/curl --resolve www.haxx.se:80:127.0.0.1 www.haxx.se -v

What's the purpose of resolving based on port number as well as IP address?

My initial intent was not to use the port number like that. I did it because...

"Everything" internally within libcurl uses the getaddrinfo concept, either directly if the platform provides it or by a wrappr layer on top of the native resolver functions.

getaddrinfo() has a port number in the resolve call (a bit deceivingly called "service"), and it produces a result (linked list of addresses) that includes the port number. Everything in that concept is wide open to allow systems to resolve host+portA differently than host+portB. Since the port is in the results we already cache name resolves associated with a unique host+port pair. Changing that would require an effort.

First I did a special approach that would store this custom resolve as port 0 and if the host+port lookup in the cache failed, it would check host+port0 but we still would have to fix the fact that the address structs have the port number embedded which I decided to not do this time.

I decided that perhaps we can rather see it as an added bonus feature: now we can provide a "fake" resolve for a specific port while other ports will continue using the ordinary resolved address.

Of course all this is subject to discussion and change if we desire to.

This use/abuse of the DNS cache does look like a fairly clean way of accomplishing this, though.

Yes I think so. The trickier part will be to remove entries nicely.

--

 / daniel.haxx.se
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to