We've decided to finally do something about the situation when it comes to asynchronous / non-blocking name resolves. Our ambition is to write a multi platform library to offer this.
We're still in the planning phase.
RFC 1035 - "DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION"
Compare with existing other libraries
a. Provide both synchronous and asynchronous interfaces.
b. Synchronous interface: Should support common interfaces, such as gethostbyname() and getaddrinfo().
c. Asynchronous interface: Should be based on non-blocking sockets.
d. Must not use signals as a mean of communication.
a. Must support both IPv4 and IPv6 addresses.
b. Must support hostname and address lookup (A and PTR types)
c. Could support other types of lookup (e.g. CNAME and MX types)
a. Should integrate easily with applications, and particularly, their mainloop implementations.
a. Must be portable to most commonly used platforms (Linux, Solaris, Win32).
b. Should be portable to as many platforms as possible.
c. Should not rely on hardware or compiler specifics, e.g. endianess and size/alignment of primitive types.
a. Must not require multi-threading.
b. Must work correctly in multi-threaded environments.
Location: Should be hosted by sourceforge.net
License: Must allow use in Open Source and proprietary projects.
- Implement DNS protocol, or use native DNS resolver in a separate process to prevent blocking.
- Implement multi-threading synchronization ourselves, or use callbacks and let the application implement synchronization.
- Whether or not to support DNS caching.
- Whether or not to support DNS security extensions.