Boost logo

Boost Users :

Subject: Re: [Boost-users] Caching the iterator of async_resolve()?
From: Gavin Lambert (gavinl_at_[hidden])
Date: 2013-12-17 21:42:44


On 18/12/2013 14:21, Quoth Kaspar Fischer:
> Have others had any experiences with this? I want to avoid making a DNS
> lookup every time I perform a (HTTP) request.

Typically you should. The OS has its own cache of recently queried
domains and the corresponding Time-To-Live value (ie. "how long this is
valid for") provided by the actual DNS server, and larger networks will
often have a secondary DNS cache on the LAN that also respects this.

So a resolve doesn't always hit the Internet, but it's important to
respect the TTL policy set by the target server to properly handle load
balancing and dynamic addressing.

> Also – and not strictly related to this question – why are DNS lookups
> in Boost Asio tied to a service, as in resolve(query(host,"http"))?

Because the underlying getaddrinfo expects a service name/port. I think
it's just a convenience to obtain the port number at the same time as
the hostname, assuming both were provided as strings, rather than having
to make two separate calls to resolve each.

Personally, I think it's better to use the actual numeric port instead
of using a service name, unless you're obtaining the service name from
user input (such as an URL) -- and even then typically a given app will
only support specific service types anyway, so there isn't really much
call for being able to look them up by name. Maybe there are historic
reasons for it. (I know each client has a config file that contains the
name->port mappings, but I can't think of any scenario in which editing
this file to produce different results is useful.)


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net