resolver(3N) — NETWORK FUNCTIONS
NAME
resolver: res_query, res_search, res_mkquery, res_send, res_init, dn_comp, dn_expand − resolver routines
SYNOPSIS
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
"res_query(dname, class, type, answer, anslen)"
char ∗dname;
int class, type;
u_char ∗answer;
int anslen;
"res_search(dname, class, type, answer, anslen)"
char ∗dname;
int class, type;
u_char ∗answer;
int anslen;
"res_mkquery(op, dname, class, type, data, datalen, newrr, buf, buflen)"
int op;
char ∗dname;
int class, type;
char ∗data;
int datalen;
struct rrec ∗newrr;
char ∗buf;
int buflen;
res_send(msg, msglen, answer, anslen)
char ∗msg;
int msglen;
char ∗answer;
int anslen;
res_init()
dn_comp(exp_dn, comp_dn, length, dnptrs, lastdnptr)
char ∗exp_dn, ∗comp_dn;
int length;
char ∗∗dnptrs, ∗∗lastdnptr;
dn_expand(msg, eomorig, comp_dn, exp_dn, length)
char ∗msg, ∗eomorig, ∗comp_dn, exp_dn;
int length;
DESCRIPTION
These routines are used for making, sending, and for interpreting query and reply messages pertaining to Internet domain name servers.
The structure _res contains the global configuration and state information that is used by the resolver routines. Most of the values have reasonable defaults and can be ignored.
The options are stored as a simple bit mask containing the bitwise “or” of the options enabled. The options stored in _res.options are defined in /usr/include/resolv.h and are as follows:
RES_INIT True if the initial name server address and default domain name are initialized (i.e., res_init has been called).
RES_DEBUG
Print the debugging messages.
RES_AAONLY
Accept authoritative answers only. With this option, res_send should continue until it finds an authoritative answer or finds an error. Currently this is not implemented.
RES_USEVC
Use TCP connections for queries instead of UDP datagrams.
RES_STAYOPEN
Used with RES_USEVC to keep the TCP connection open between queries. This is useful only in programs that regularly do many queries. UDP should be the normal mode used.
RES_IGNTC
Unused currently (ignore truncation errors, i.e., don’t retry with TCP).
RES_RECURSE
Set the recursion-desired bit in queries. This is the default value. res_send will not do iterative queries and thus will expect the name server to handle recursion.
RES_DEFNAMES
If set, res_search will append the default domain name to the “single-component” names (that is, those that do not contain a dot). This option is enabled by default.
RES_DNSRCH
If this option is set, res_search will search for host names in the current domain and in parent domains [see hostname(7)]. This will be used by the standard host lookup routine gethostbyname(3N). This option is enabled by default.
The res_init routine will read the configuration file /etc/resolv.conf [if any; see resolv.conf (4)] to get the default domain name, search list and the Internet address of the local name server(s). If no server is configured, the host running the resolver will be tried. The current domain name will be defined by the hostname if not specified in the configuration file; it can be overridden by the environment variable LOCALDOMAIN . The initialization normally occurs on the first call to one of the following routines.
The res_query function provides an interface to the server query mechanism. It will construct a query, send it to the local server, await a response, and then make some preliminary checks on the reply. The query requests information of the specified type and class for the specified fully-qualified domain name dname . The reply message will be left in the answer buffer with length anslen supplied by the caller.
The res_search routine will make a query and await a response like res_query, but in addition, it will implement the default and search rules controlled by the RES_DEFNAMES and RES_DNSRCH options. Then it will return the first successful reply.
The remaining routines are lower-level routines used by res_query . The res_mkquery function will construct a standard query message and then place it in buf. It will return the size of the query or −1 if the query is larger than buflen. The query type op usually will be QUERY, but it can be any of the query types defined in <arpa/nameser.h>. The domain name for the query is given by dname. The newrr argument is currently unused, but is intended for generating update messages.
The res_send routine will send a pre-formatted query and then return an answer. It will call res_init if RES_INIT is not set, send the query to the local name server, and then handle any timeouts and retries. The length of the reply message will be returned or −1 if there were any errors.
The dn_comp function will compress the domain name exp_dn and then store it in comp_dn . The size of the compressed name will be returned or −1 if there were any errors. The size of the array pointed to by comp_dn will be given by length . The compression will use an array of pointers dnptrs to previously-compressed names in the current message. The first pointer will point to to the beginning of the message; the list will end with NULL. The limit to the array will be specified by lastdnptr. A side effect of dn_comp will be to update the list of pointers for labels inserted into the message as the name is compressed. If dnptr is NULL, the names will not be compressed. If lastdnptr is NULL, the list of labels will not be updated.
The dn_expand entry will expand the compressed domain name comp_dn to a full domain name. The compressed name will be contained in a query or reply message; msg will be a pointer to the beginning of the message. The uncompressed name will be placed in the buffer indicated by exp_dn which will be of size length. The size of the compressed name will be returned or −1 if there was an error.
USER CONSIDERATIONS
Any program which uses one of the above resolver functions must be linked dynamically with either /usr/lib/libsocket.so or /usr/lib/libresolv.so.
FILES
/etc/resolv.conf
/usr/include/arpa/nameserv.h
/usr/include/netinet/in.h
/usr/include/resolv.h
/usr/include/sys/types.h
/usr/lib/libresolv.so
/usr/lib/libsocket.so
SEE ALSO
named(1M), gethostbyname(3N), resolv.conf(4).
RFC 1032, RFC 1033, RFC 1034, RFC 1035, RFC 974.
— Internet Utilities