adns is a resolver library for C (and C++) programs. In contrast with
the existing interfaces, gethostbyname et al and libresolv, it has the
* It is reasonably easy to use for simple programs which just want
to translate names to addresses, look up MX records, etc.
* It can be used in an asynchronous, non-blocking, manner. Many
queries can be handled simultaneously.
* Responses are decoded automatically into a natural representation
for a C program - there is no need to deal with DNS packet
* Sanity checking (eg, name syntax checking, reverse/forward
correspondence, CNAME pointing to CNAME) is performed
* Time-to-live, CNAME and other similar information is returned in
an easy-to-use form, without getting in the way.
* There is no global state in the library; resolver state is an
opaque data structure which the client creates explicitly. A
program can have several instances of the resolver.
* Errors are reported to the application in a way that distinguishes
the various causes of failure properly.
* Understands conventional resolv.conf, but this can overridden by
* Flexibility. For example, the application can tell adns to: ignore
environment variables (for setuid programs), disable sanity checks
eg to return arbitrary data, override or ignore resolv.conf in
favour of supplied configuration, etc.
* Believed to be correct ! For example, will correctly back off to
TCP in case of long replies or queries, or to other nameservers if
several are available. It has sensible handling of bad responses