1 /* 2 * Copyright (C) 1995, 1996, 1997, and 1998 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 * $Id: getaddrinfo.h 25996 2008-09-04 15:45:06Z androsyn $ 30 */ 31 32 struct addrinfo { 33 int ai_flags; 34 int ai_family; 35 int ai_socktype; 36 int ai_protocol; 37 size_t ai_addrlen; 38 char *ai_canonname; 39 struct sockaddr *ai_addr; 40 struct addrinfo *ai_next; 41 }; 42 43 #ifndef AI_PASSIVE 44 #define AI_PASSIVE 0x00000001 /* get address to use bind() */ 45 #endif /* AI_PASSIVE */ 46 47 #ifndef AI_NUMERICHOST 48 #define AI_NUMERICHOST 0x00000004 /* prevent name resolution */ 49 #endif /* AI_NUMERICHOST */ 50 51 #ifndef EAI_FAIL 52 #define EAI_FAIL 4 /* non-recoverable failure in name resolution */ 53 #endif /* EAI_FAIL */ 54 55 #ifndef EAI_FAMILY 56 #define EAI_FAMILY 5 /* ai_family not supported */ 57 #endif /* EAI_FAMILY */ 58 59 #ifndef EAI_MEMORY 60 #define EAI_MEMORY 6 /* memory allocation failure */ 61 #endif /* EAI_MEMORY */ 62 63 #ifndef EAI_NONAME 64 #define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 65 #endif /* EAI_NONAME */ 66 67 #ifndef EAI_SYSTEM 68 #define EAI_SYSTEM 11 /* system error returned in errno */ 69 #endif /* EAI_SYSTEM */ 70 71 #ifndef NI_NUMERICHOST 72 #define NI_NUMERICHOST 0x00000002 73 #endif /* NI_NUMERICHOST */ 74 75 #ifndef NI_NAMEREQD 76 #define NI_NAMEREQD 0x00000004 77 #endif /* NI_NAMEREQD */ 78 79 #ifndef NI_NUMERICSERV 80 #define NI_NUMERICSERV 0x00000008 81 #endif /* NI_NUMERICSERV */ 82 83 #ifndef NI_DGRAM 84 #define NI_DGRAM 0x00000010 85 #endif /* NI_DGRAM */ 86 87 #ifndef INADDR_NONE 88 #define INADDR_NONE ((unsigned int) 0xffffffff) 89 #endif /* INADDR_NONE */ 90 91 int getaddrinfo(const char *hostname, const char *servname, 92 const struct addrinfo *hints, struct addrinfo **res); 93 void freeaddrinfo(struct addrinfo *ai); 94 95 #define SUCCESS 0 96 #define ANY 0 97 #define YES 1 98 #define NO 0 99 100 #undef EAI_ADDRFAMILY 101 #undef EAI_AGAIN 102 #undef EAI_BADFLAGS 103 #undef EAI_FAIL 104 #undef EAI_FAMILY 105 #undef EAI_MEMORY 106 #undef EAI_NODATA 107 #undef EAI_NONAME 108 #undef EAI_SERVICE 109 #undef EAI_SOCKTYPE 110 #undef EAI_SYSTEM 111 #undef EAI_BADHINTS 112 #undef EAI_PROTOCOL 113 #undef EAI_MAX 114 #undef AI_MASK 115 116 #define EAI_ADDRFAMILY 1 /* address family for hostname not supported */ 117 #define EAI_AGAIN 2 /* temporary failure in name resolution */ 118 #define EAI_BADFLAGS 3 /* invalid value for ai_flags */ 119 #define EAI_FAIL 4 /* non-recoverable failure in name resolution */ 120 #define EAI_FAMILY 5 /* ai_family not supported */ 121 #define EAI_MEMORY 6 /* memory allocation failure */ 122 #define EAI_NODATA 7 /* no address associated with hostname */ 123 #define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 124 #define EAI_SERVICE 9 /* servname not supported for ai_socktype */ 125 #define EAI_SOCKTYPE 10 /* ai_socktype not supported */ 126 #define EAI_SYSTEM 11 /* system error returned in errno */ 127 #define EAI_BADHINTS 12 128 #define EAI_PROTOCOL 13 129 #define EAI_MAX 14 130 #define AI_MASK (AI_PASSIVE | AI_NUMERICHOST) 131