RESOLVER(3) Library Functions Manual RESOLVER(3)
resolver, res_mkquery, res_send, res_init, dn_comp, dn_expand -
res_mkquery(op, dname, class, type, data, datalen, newrr, buf, buflen)
int class, type;
struct rrec *newrr;
res_send(msg, msglen, answer, anslen)
dn_comp(exp_dn, comp_dn, length, dnptrs, lastdnptr)
u_char *exp_dn, *comp_dn;
u_char **dnptrs, **lastdnptr;
dn_expand(msg, msglen, comp_dn, exp_dn, length)
u_char *msg, *eomorig, *comp_dn, exp_dn;
These routines are used for making, sending and interpreting packets to
Internet domain name servers. You can link a program with the resolver
library using the -lresolv argument on the linking command line.
Global information that is used by the resolver routines is kept in the
variable _res. Most of the values have reasonable defaults and can be
ignored. Options are a simple bit mask and are OR'ed in to enable.
Options stored in _res.options are defined in <<resolv.h>> and are as
RES_INIT True if the initial name server address and default
domain name are initialized (that is, res_init()
has been called).
RES_DEBUG Print debugging messages.
RES_AAONLY Accept authoritative answers only. res_send() con-
tinues 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.
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, that
is, do not retry with TCP).
RES_RECURSE Set the recursion desired bit in queries. This is
the default. res_send() does not do iterative
queries and expects the name server to handle
RES_DEFNAMES Append the default domain name to single label
queries. This is the default.
RES_DNSRCH Search up the domain tree from the default domain,
in all but the top level. This is the default.
res_init() reads the initialization file to get the default domain name
and the Internet addresses of the initial name servers. If no name-
server line exists, the host running the resolver is tried.
res_mkquery() makes a standard query message and places it in buf.
res_mkquery() returns the size of the query or -1 if the query is
larger than buflen. op is usually QUERY but can be any of the query
types defined in <<nameser.h>>. dname is the domain name. If dname con-
sists of a single label and the RES_DEFNAMES flag is enabled (the
default), dname is appended with the current domain name. The current
domain name is defined in a system file and can be overridden by the
environment variable LOCALDOMAIN. newrr is currently unused but is
intended for making update messages.
res_send() sends a query to name servers and returns an answer. It
calls res_init() if RES_INIT is not set, send the query to the local
name server, and handle timeouts and retries. The length of the mes-
sage is returned or -1 if there were errors.
dn_expand() Expands the compressed domain name comp_dn to a full domain
name. Expanded names are converted to upper case. msg is a pointer to
the beginning of the message, exp_dn is a pointer to a buffer of size
length for the result. The size of compressed name is returned or -1
if there was an error.
dn_comp() Compresses the domain name exp_dn and stores it in comp_dn.
The size of the compressed name is returned or -1 if there were errors.
length is the size of the array pointed to by comp_dn. dnptrs is a
list of pointers to previously compressed names in the current message.
The first pointer points to the beginning of the message and the list
ends with NULL. lastdnptr is a pointer to the end of the array pointed
to dnptrs. A side effect is to update the list of pointers for labels
inserted into the message by dn_comp() as the name is compressed. If
dnptr is NULL, do not try to compress names. If lastdnptr is NULL, do
not update the list.
/etc/resolv.conf see resolv.conf(5)
/usr/lib/libresolv.a is necessary for compiling programs.
30 June 1989 RESOLVER(3)