+ adns
+
+ Advanced, easy to use, asynchronous-capable DNS client library.
+
+ adns is a resolver library for C (and C++) programs. In contrast with
+ the existing interfaces, gethostbyname et al and libresolv, it has the
+ following features:
+ * 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
+ formats.
+ * Sanity checking (eg, name syntax checking, reverse/forward
+ correspondence, CNAME pointing to CNAME) is performed
+ automatically.
+ * Time-to-live, CNAME and other similar information is returned in
+ an easy-to-use form, without affecting ease-of-use.
+ * 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
+ environment variables.
+ * 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, change its caching behaviour,
+ use a different flow of control model, 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
+ etc.
+
+Forthcoming:
+
+ I hope that future versions may also have the following features:
+ * The library can be used by threads in a multithreaded program in a
+ natural way. It will multiplex many threads' queries through a
+ single query socket.
+ * Limited caching behaviour.
+ * IPv6 support.
+
+ (Technical note: adns requires a real nameserver like BIND running on
+ the same system or a nearby one, which must be willing to provide
+ `recursive service'. I.e., adns is a `stub resolver'. All properly
+ configured UN*X and GNU systems will already have such nameserver(s);
+ they are usually listed in /etc/resolv.conf.)