res_init, res_query, res_search, res_querydomain, res_mkquery, res_send, dn_comp, dn_expand — resolver routines
#include <netinet/in.h> #include <arpa/nameser.h> #include <resolv.h> extern struct state _res;
| int
            res_init( | void); | 
| int
            res_query( | const char *dname, | 
| int class, | |
| int type, | |
| unsigned char *answer, | |
| int anslen ); | 
| int
            res_search( | const char *dname, | 
| int class, | |
| int type, | |
| unsigned char *answer, | |
| int anslen ); | 
| int
            res_querydomain( | const char *name, | 
| const char *domain, | |
| int class, | |
| int type, | |
| unsigned char *answer, | |
| int anslen ); | 
| int
            res_mkquery( | int op, | 
| const char *dname, | |
| int class, | |
| int type, | |
| char *data, | |
| int datalen, | |
| struct rrec *newrr, | |
| char *buf, | |
| int buflen ); | 
| int
            res_send( | const char *msg, | 
| int msglen, | |
| char *answer, | |
| int anslen ); | 
| int
            dn_comp( | unsigned char *exp_dn, | 
| unsigned char *comp_dn, | |
| int length, | |
| unsigned char **dnptrs, | |
| unsigned char **lastdnptr ); | 
| int
            dn_expand( | unsigned char *msg, | 
| unsigned char *eomorig, | |
| unsigned char *comp_dn, | |
| char *exp_dn, | |
| int length ); | 
| ![[Note]](../stylesheet/note.png) | Note | 
|---|---|
| Link with  | 
These functions make queries to and interpret the responses from Internet domain name servers.
The res_init() function
      reads the configuration files (see resolv.conf(5)) to get the
      default domain name, search order and name server
      address(es). If no server is given, the local host is tried.
      If no domain is given, that associated with the local host is
      used. It can be overridden with the environment variable
      LOCALDOMAIN. res_init() is normally executed by the
      first call to one of the other functions.
The res_query() function
      queries the name server for the fully qualified domain name
      name of specified
      type and class. The reply is left in the
      buffer answer of
      length anslen
      supplied by the caller.
The res_search() function
      makes a query and waits for the response like res_query(), but in addition implements the
      default and search rules controlled by RES_DEFNAMES and RES_DNSRCH (see description of _res options below).
The res_querydomain()
      function makes a query using res_query() on the concatenation of
      name and domain.
The following functions are lower-level routines used by
      res_query().
The res_mkquery() function
      constructs a query message in buf of length buflen for the domain name
      dname. The query type
      op is usually
      QUERY, but can be any of the
      types defined in <arpa/nameser.h>
      newrr is currently
      unused.
The res_send() function
      sends a preformatted query given in msg of length msglen and returns the answer
      in answer which is of
      length anslen. It
      will call res_init(), if it has
      not already been called.
The dn_comp() function
      compresses the domain name exp_dn and stores it in the
      buffer comp_dn of
      length length. The
      compression uses an array of pointers dnptrs to previously compressed
      names in the current message. The first pointer points to the
      beginning of the message and the list ends with NULL. The
      limit of the array is specified by lastdnptr. If dnptr is NULL, domain names are not
      compressed. If lastdnptr is NULL, the list of
      labels is not updated.
The dn_expand() function
      expands the compressed domain name comp_dn to a full domain name,
      which is placed in the buffer exp_dn of size length. The compressed name is
      contained in a query or reply message, and msg points to the beginning of
      the message.
The resolver routines use global configuration and state
      information contained in the structure _res, which is defined in <resolv.h>
      The only field that is normally manipulated by the user is
      _res.options. This
      field can contain the bitwise "OR" of the following
      options:
RES_INITTrue if res_init() has
            been called.
RES_DEBUGPrint debugging messages.
RES_AAONLYAccept authoritative answers only. res_send() continues until it finds
            an authoritative answer or returns an error. [Not
            currently implemented].
RES_USEVCUse TCP connections for queries rather than UDP datagrams.
RES_PRIMARYQuery primary domain name server only.
RES_IGNTCIgnore truncation errors. Don't retry with TCP. [Not currently implemented].
RES_RECURSESet the recursion desired bit in queries. Recursion
            is carried out by the domain name server, not by
            res_send(). [Enabled by
            default].
RES_DEFNAMESIf set, res_search()
            will append the default domain name to single component
            names, i.e., those that do not contain a dot. [Enabled
            by default].
RES_STAYOPENUsed with RES_USEVC to
            keep the TCP connection open between queries.
RES_DNSRCHIf set, res_search()
            will search for hostnames in the current domain and in
            parent domains. This option is used by gethostbyname(3).
            [Enabled by default].
The res_init() function
      returns 0 on success, or −1 if an error occurs.
The res_query(),
      res_search(), res_querydomain(), res_mkquery() and res_send() functions return the length of
      the response, or −1 if an error occurs.
The dn_comp() and
      dn_expand() functions return
      the length of the compressed name, or −1 if an error
      occurs.
This page is part of release 3.33 of the Linux man-pages project. A
      description of the project, and information about reporting
      bugs, can be found at http://man7.org/linux/man-pages/.
| Copyright 1993 David Metcalfe (davidprism.demon.co.uk) Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Since the Linux kernel and libraries are constantly changing, this manual page may be incorrect or out-of-date. The author(s) assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. The author(s) may not have taken the same level of care in the production of this manual, which is licensed free of charge, as they might when working professionally. Formatted or processed versions of this manual, if unaccompanied by the source, must acknowledge the copyright and authors of this work. References consulted: Linux libc source code Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991) 386BSD man pages Modified 1993-07-25 by Rik Faith (faithcs.unc.edu) Modified 2004-10-31 by aeb |