ext/socket/addrinfo.h


DEFINITIONS

This source file includes following functions.


   1  /*
   2   * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
   3   * All rights reserved.
   4   * 
   5   * Redistribution and use in source and binary forms, with or without
   6   * modification, are permitted provided that the following conditions
   7   * are met:
   8   * 1. Redistributions of source code must retain the above copyright
   9   *    notice, this list of conditions and the following disclaimer.
  10   * 2. Redistributions in binary form must reproduce the above copyright
  11   *    notice, this list of conditions and the following disclaimer in the
  12   *    documentation and/or other materials provided with the distribution.
  13   * 3. Neither the name of the project nor the names of its contributors
  14   *    may be used to endorse or promote products derived from this software
  15   *    without specific prior written permission.
  16   * 
  17   * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
  18   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  19   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  20   * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
  21   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  22   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  23   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  24   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  25   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  26   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  27   * SUCH DAMAGE.
  28   */
  29  
  30  #ifndef ADDR_INFO_H
  31  #define ADDR_INFO_H
  32  #ifndef HAVE_GETADDRINFO
  33  
  34  /* special compatibility hack */
  35  #undef EAI_ADDRFAMILY
  36  #undef EAI_AGAIN
  37  #undef EAI_BADFLAGS
  38  #undef EAI_FAIL
  39  #undef EAI_FAMILY
  40  #undef EAI_MEMORY
  41  #undef EAI_NODATA
  42  #undef EAI_NONAME
  43  #undef EAI_SERVICE
  44  #undef EAI_SOCKTYPE
  45  #undef EAI_SYSTEM
  46  #undef EAI_BADHINTS
  47  #undef EAI_PROTOCOL
  48  #undef EAI_MAX
  49  
  50  #undef AI_PASSIVE
  51  #undef AI_CANONNAME
  52  #undef AI_NUMERICHOST
  53  #undef AI_ALL
  54  #undef AI_ADDRCONFIG
  55  #undef AI_V4MAPPED
  56  #undef AI_DEFAULT
  57  
  58  #undef NI_NOFQDN
  59  #undef NI_NUMERICHOST
  60  #undef NI_NAMEREQD
  61  #undef NI_NUMERICSERV
  62  #undef NI_DGRAM
  63  
  64  #define addrinfo addrinfo__compat
  65  #define getaddrinfo getaddrinfo__compat
  66  #define getnameinfo getnameinfo__compat
  67  #define freehostent freehostent__compat
  68  #define freeaddrinfo freeaddrinfo__compat
  69  
  70  #ifndef __P
  71  # ifdef HAVE_PROTOTYPES
  72  #  define __P(args) args
  73  # else
  74  #  define __P(args) ()
  75  # endif
  76  #endif
  77  
  78  /* special compatibility hack -- end*/
  79  
  80  
  81  /*
  82   * Error return codes from getaddrinfo()
  83   */
  84  #define EAI_ADDRFAMILY   1      /* address family for hostname not supported */
  85  #define EAI_AGAIN        2      /* temporary failure in name resolution */
  86  #define EAI_BADFLAGS     3      /* invalid value for ai_flags */
  87  #define EAI_FAIL         4      /* non-recoverable failure in name resolution */
  88  #define EAI_FAMILY       5      /* ai_family not supported */
  89  #define EAI_MEMORY       6      /* memory allocation failure */
  90  #define EAI_NODATA       7      /* no address associated with hostname */
  91  #define EAI_NONAME       8      /* hostname nor servname provided, or not known */
  92  #define EAI_SERVICE      9      /* servname not supported for ai_socktype */
  93  #define EAI_SOCKTYPE    10      /* ai_socktype not supported */
  94  #define EAI_SYSTEM      11      /* system error returned in errno */
  95  #define EAI_BADHINTS    12
  96  #define EAI_PROTOCOL    13
  97  #define EAI_MAX         14
  98  
  99  /*
 100   * Flag values for getaddrinfo()
 101   */
 102  #define AI_PASSIVE      0x00000001 /* get address to use bind() */
 103  #define AI_CANONNAME    0x00000002 /* fill ai_canonname */
 104  #define AI_NUMERICHOST  0x00000004 /* prevent name resolution */
 105  /* valid flags for addrinfo */
 106  #define AI_MASK         (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
 107  
 108  #define AI_ALL          0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
 109  #define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */
 110  #define AI_ADDRCONFIG   0x00000400 /* only if any address is assigned */
 111  #define AI_V4MAPPED     0x00000800 /* accept IPv4-mapped IPv6 address */
 112  /* special recommended flags for getipnodebyname */
 113  #define AI_DEFAULT      (AI_V4MAPPED_CFG | AI_ADDRCONFIG)
 114  
 115  /*
 116   * Constants for getnameinfo()
 117   */
 118  #define NI_MAXHOST      1025
 119  #define NI_MAXSERV      32
 120  
 121  /*
 122   * Flag values for getnameinfo()
 123   */
 124  #define NI_NOFQDN       0x00000001
 125  #define NI_NUMERICHOST  0x00000002
 126  #define NI_NAMEREQD     0x00000004
 127  #define NI_NUMERICSERV  0x00000008
 128  #define NI_DGRAM        0x00000010
 129  
 130  struct addrinfo {
 131          int     ai_flags;       /* AI_PASSIVE, AI_CANONNAME */
 132          int     ai_family;      /* PF_xxx */
 133          int     ai_socktype;    /* SOCK_xxx */
 134          int     ai_protocol;    /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
 135          size_t  ai_addrlen;     /* length of ai_addr */
 136          char    *ai_canonname;  /* canonical name for hostname */
 137          struct sockaddr *ai_addr;       /* binary address */
 138          struct addrinfo *ai_next;       /* next structure in linked list */
 139  };
 140  
 141  extern int getaddrinfo __P((
 142          const char *hostname, const char *servname,
 143          const struct addrinfo *hints,
 144          struct addrinfo **res));
 145  
 146  extern int getnameinfo __P((
 147          const struct sockaddr *sa,
 148          size_t salen,
 149          char *host,
 150          size_t hostlen,
 151          char *serv,
 152          size_t servlen,
 153          int flags));
 154  
 155  extern void freehostent __P((struct hostent *));
 156  extern void freeaddrinfo __P((struct addrinfo *));
 157  #if defined __UCLIBC__
 158  const
 159  #endif
 160  extern char *gai_strerror __P((int));
 161  
 162  /* In case there is no definition of offsetof() provided - though any proper
 163  Standard C system should have one. */
 164  
 165  #ifndef offsetof
 166  #define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
 167  #endif
 168  
 169  #endif
 170  #endif