


RESOLVER(3)            C LIBRARY FUNCTIONS            RESOLVER(3)



NAME
     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)
     const char *dname;
     int class, type;
     u_char *answer;
     int anslen;

     res_search(dname, class, type, answer, anslen)
     const char *dname;
     int class, type;
     u_char *answer;
     int anslen;

     res_mkquery(op, dname, class, type,  data,  datalen,  newrr,
     buf, buflen)
     int op;
     const char *dname;
     int class, type;
     const char *data;
     int datalen;
     struct rrec *newrr;
     u_char *buf;
     int buflen;

     res_send(msg, msglen, answer, anslen)
     const u_char *msg;
     int msglen;
     u_char *answer;
     int anslen;

     res_init()

     dn_comp(exp_dn, comp_dn, length, dnptrs, lastdnptr)
     const char *exp_dn;
     u_char *comp_dn;
     int length;
     u_char **dnptrs, **lastdnptr;

     dn_expand(msg, eomorig, comp_dn, exp_dn, length)
     const u_char *msg, *eomorig, *comp_dn;
     char *exp_dn;
     int length;




Sun Release 4.1  Last change: December 11, 1995                 1






RESOLVER(3)            C LIBRARY FUNCTIONS            RESOLVER(3)



DESCRIPTION
     These routines are used for making, sending and interpreting
     query and reply messages with Internet domain name servers.

     Global configuration and state information that is  used  by
     the  resolver  routines is kept in the structure __r_e_s.  Most
     of the values have reasonable defaults and can  be  ignored.
     Options  stored  in __r_e_s._o_p_t_i_o_n_s are defined in _r_e_s_o_l_v._h and
     are as follows.  Options are stored as  a  simple  bit  mask
     containing the bitwise ``or'' of the options enabled.

     RES_INIT
          True if the initial name  server  address  and  default
          domain  name  are  initialized (i.e., _r_e_s__i_n_i_t has been
          called).

     RES_DEBUG
          Print debugging messages.

     RES_AAONLY
          Accept authoritative answers only.  With  this  option,
          _r_e_s__s_e_n_d  should  continue until it finds an authorita-
          tive 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.   (_r_e_s__s_e_n_d  does not do iterative queries and
          expects the name server to handle recursion.)

     RES_DEFNAMES
          If set, _r_e_s__s_e_a_r_c_h will append the default domain  name
          to  single-component names (those that do not contain a
          dot).  This option is enabled by default.

     RES_DNSRCH
          If this option is set, _r_e_s__s_e_a_r_c_h will search for  host
          names  in the current domain and in parent domains; see



Sun Release 4.1  Last change: December 11, 1995                 2






RESOLVER(3)            C LIBRARY FUNCTIONS            RESOLVER(3)



          _h_o_s_t_n_a_m_e(7).  This is used by the standard host  lookup
          routine  _g_e_t_h_o_s_t_b_y_n_a_m_e(3).   This  option is enabled by
          default.

     RES_NOALIASES
          This option turns off the user level  aliasing  feature
          controlled  by  the  HOSTALIASES  environment variable.
          Network daemons should set this option.

     The _r_e_s__i_n_i_t routine reads the configuration file  (if  any;
     see _r_e_s_o_l_v_e_r(5)) 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 is
     tried.  The current domain name is defined by  the  hostname
     if  not specified in the configuration file; it can be over-
     ridden  by  the  environment  variable  LOCALDOMAIN.    This
     environment  variable  may  contain  several blank-separated
     tokens if you wish to override the _s_e_a_r_c_h  _l_i_s_t  on  a  per-
     process basis.  This is similar to the _s_e_a_r_c_h command in the
     configuration   file.     Another    environment    variable
     (``RES_OPTIONS'')  can  be  set to override certain internal
     resolver options which are otherwise set by changing  fields
     in  the  __r_e_s structure or are inherited from the configura-
     tion  file's   _o_p_t_i_o_n_s   command.    The   syntax   of   the
     ``RES_OPTIONS''   environment   variable   is  explained  in
     _r_e_s_o_l_v_e_r(5).  Initialization normally occurs  on  the  first
     call to one of the other resolver routines.

     The _r_e_s__q_u_e_r_y function provides an interface to  the  server
     query  mechanism.   It  constructs  a query, sends it to the
     local server,  awaits  a  response,  and  makes  preliminary
     checks  on the reply.  The query requests information of the
     specified _t_y_p_e and _c_l_a_s_s for the  specified  fully-qualified
     domain  name _d_n_a_m_e . The reply message is left in the _a_n_s_w_e_r
     buffer with length _a_n_s_l_e_n supplied by the caller.

     The _r_e_s__s_e_a_r_c_h routine makes a query and awaits  a  response
     like  _r_e_s__q_u_e_r_y,  but in addition, it implements the default
     and  search  rules  controlled  by  the   RES_DEFNAMES   and
     RES_DNSRCH options.  It returns the first successful reply.

     The remaining routines  are  lower-level  routines  used  by
     _r_e_s__q_u_e_r_y.   The  _r_e_s__m_k_q_u_e_r_y function constructs a standard
     query message and places it in _b_u_f.  It returns the size  of
     the  query,  or  -1 if the query is larger than _b_u_f_l_e_n.  The
     query type _o_p is usually QUERY, but can be any of the  query
     types  defined in <_a_r_p_a/_n_a_m_e_s_e_r._h>.  The domain name for the
     query is given by _d_n_a_m_e.  _N_e_w_r_r is currently unused  but  is
     intended for making update messages.

     The _r_e_s__s_e_n_d routine sends a pre-formatted query and returns
     an  answer.   It  will call _r_e_s__i_n_i_t if RES_INIT is not set,



Sun Release 4.1  Last change: December 11, 1995                 3






RESOLVER(3)            C LIBRARY FUNCTIONS            RESOLVER(3)



     send the query to the local name server, and handle timeouts
     and  retries.   The length of the reply message is returned,
     or -1 if there were errors.

     The _d_n__c_o_m_p function compresses the domain name  _e_x_p__d_n  and
     stores  it  in  _c_o_m_p__d_n.  The size of the compressed name is
     returned or -1 if there were errors.  The size of the  array
     pointed  to  by _c_o_m_p__d_n is given by _l_e_n_g_t_h.  The compression
     uses an array of pointers  _d_n_p_t_r_s  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.
     The  limit  to  the array is specified by _l_a_s_t_d_n_p_t_r.  A side
     effect of _d_n__c_o_m_p is to update  the  list  of  pointers  for
     labels  inserted into the message as the name is compressed.
     If _d_n_p_t_r is NULL, names are not compressed.  If _l_a_s_t_d_n_p_t_r is
     NULL, the list of labels is not updated.

     The _d_n__e_x_p_a_n_d  entry  expands  the  compressed  domain  name
     _c_o_m_p__d_n  to  a  full domain name The compressed name is con-
     tained in a query or reply message; _m_s_g is a pointer to  the
     beginning  of  the message.  The uncompressed name is placed
     in the buffer indicated by _e_x_p__d_n which is of  size  _l_e_n_g_t_h.
     The  size  of compressed name is returned or -1 if there was
     an error.

FILES
     /etc/resolv.conf    see resolver(5)

SEE ALSO
     gethostbyname(3), in.named(8), resolver(5), hostname(7),
     RFC1032, RFC1033, RFC1034, RFC1035, RFC974,
     SMM:11 Name Server Operations Guide for BIND























Sun Release 4.1  Last change: December 11, 1995                 4



