resolver(3N) (TCP/IP) resolver(3N)
NAME
resolver, resmkquery, ressend, resinit, dncomp, dnexpand -
resolver routines
SYNOPSIS
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
resmkquery(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;
ressend(buf, buflen, answer, anslen)
char *buf;
int buflen;
char *answer;
int anslen;
resinit()
dncomp(expdn, compdn, length, dnptrs, lastdnptr)
uchar *expdn, *compdn;
int length;
uchar **dnptrs, **lastdnptr;
dnexpand(msg, eomorig, compdn, expdn, length)
uchar *msg, *eomorig, *compdn, *compdn, *expdn;
int length;
DESCRIPTION
These routines are used for making, sending and interpreting packets
to Internet domain name servers. 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 /usr/include/resolv.h and are as follows.
RESINIT True if the initial name server address and
default domain name are initialized (that is,
resinit has been called).
8/91 Page 1
resolver(3N) (TCP/IP) resolver(3N)
RESDEBUG Print debugging messages.
RESAAONLY Accept authoritative answers only. ressend will
continue until it finds an authoritative answer
or finds an error. Currently this is not
implemented.
RESUSEVC Use TCP connections for queries instead of UDP.
RESSTAYOPEN Used with RESUSEVC 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.
RESIGNTC Unused currently (ignore truncation errors, that
is, do not retry with TCP).
RESRECURSE Set the recursion desired bit in queries. This
is the default. ressend does not do iterative
queries and expects the name server to handle
recursion.
RESDEFNAMES Append the default domain name to single label
queries. This is the default.
resinit reads the initialization file to get the default domain name
and the Internet address of the initial hosts running the name
server. If this line does not exist, the host running the resolver
is tried. resmkquery makes a standard query message and places it
in buf. resmkquery will return 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 /usr/include/arpa/nameser.h. dname is the
domain name. If dname consists of a single label and the
RESDEFNAMES flag is enabled (the default), dname will be 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.
ressend sends a query to name servers and returns an answer. It
will call resinit if RESINIT is not set, send the query to the
local name server, and handle timeouts and retries. The length of
the message is returned or -1 if there were errors.
dnexpand 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.
Page 2 8/91
resolver(3N) (TCP/IP) resolver(3N)
dncomp 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 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 dncomp as
the name is compressed. If dnptr is NULL, do not try to compress
names. If lastdnptr is NULL, do not update the list.
FILES
/usr/include/arpa/nameserv.h
/usr/include/netinet/in.h
/usr/include/resolv.h
/usr/include/sys/types.h
/etc/resolv.conf
/usr/lib/libresolv.a
SEE ALSO
named(1M), resolv.conf(4).
NOTES
/usr/lib/libresolv.a is necessary for compiling programs.
Programs must be loaded with the option -lresolv.
8/91 Page 3