1511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 2511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project. 3511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * All rights reserved. 4511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 5511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Redistribution and use in source and binary forms, with or without 6511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * modification, are permitted provided that the following conditions 7511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * are met: 8511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 1. Redistributions of source code must retain the above copyright 9511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * notice, this list of conditions and the following disclaimer. 10511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 2. Redistributions in binary form must reproduce the above copyright 11511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * notice, this list of conditions and the following disclaimer in the 12511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * documentation and/or other materials provided with the distribution. 13511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 3. Neither the name of the project nor the names of its contributors 14511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * may be used to endorse or promote products derived from this software 15511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * without specific prior written permission. 16511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * 17511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 18511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 21511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * SUCH DAMAGE. 28511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 29511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 30511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* $Id: addrinfo.h,v 1.1 2002-08-01 08:33:05 risso Exp $ */ 31511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 32511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef HAVE_ADDRINFO 33511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 34511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 35511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Error return codes from getaddrinfo() 36511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 37511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */ 38511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_AGAIN 2 /* temporary failure in name resolution */ 39511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_BADFLAGS 3 /* invalid value for ai_flags */ 40511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_FAIL 4 /* non-recoverable failure in name resolution */ 41511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_FAMILY 5 /* ai_family not supported */ 42511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_MEMORY 6 /* memory allocation failure */ 43511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_NODATA 7 /* no address associated with hostname */ 44511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 45511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_SERVICE 9 /* servname not supported for ai_socktype */ 46511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_SOCKTYPE 10 /* ai_socktype not supported */ 47511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_SYSTEM 11 /* system error returned in errno */ 48511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_BADHINTS 12 49511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_PROTOCOL 13 50511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_MAX 14 51511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 52511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* internal error */ 53511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define NETDB_INTERNAL -1 /* see errno */ 54511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 55511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 56511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Flag values for getaddrinfo() 57511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 58511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define AI_PASSIVE 0x00000001 /* get address to use bind() */ 59511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define AI_CANONNAME 0x00000002 /* fill ai_canonname */ 60511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define AI_NUMERICHOST 0x00000004 /* prevent name resolution */ 61511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* valid flags for addrinfo */ 62511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST) 63511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 64511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */ 65511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */ 66511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define AI_ADDRCONFIG 0x00000400 /* only if any address is assigned */ 67511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define AI_V4MAPPED 0x00000800 /* accept IPv4-mapped IPv6 address */ 68511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* special recommended flags for getipnodebyname */ 69511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define AI_DEFAULT (AI_V4MAPPED_CFG | AI_ADDRCONFIG) 70511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 71511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct addrinfo { 72511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ 73511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int ai_family; /* PF_xxx */ 74511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int ai_socktype; /* SOCK_xxx */ 75511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ 76511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall size_t ai_addrlen; /* length of ai_addr */ 77511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall char *ai_canonname; /* canonical name for hostname */ 78511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall struct sockaddr *ai_addr; /* binary address */ 79511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall struct addrinfo *ai_next; /* next structure in linked list */ 80511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall}; 81511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 82511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern void freeaddrinfo (struct addrinfo *); 83511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern void freehostent (struct hostent *); 84511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern char *gai_strerror (int); 85511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern int getaddrinfo (const char *, const char *, 86511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall const struct addrinfo *, struct addrinfo **); 87511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern int getnameinfo (const struct sockaddr *, size_t, char *, 88511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall size_t, char *, size_t, int); 89511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern struct hostent *getipnodebyaddr (const void *, size_t, int, int *); 90511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern struct hostent *getipnodebyname (const char *, int, int, int *); 91511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern int inet_pton (int, const char *, void *); 92511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallextern const char *inet_ntop (int, const void *, char *, size_t); 93511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#else 94511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 95511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef EAI_BADHINTS 96511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_BADHINTS 12 97511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 98511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 99511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef EAI_PROTOCOL 100511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_PROTOCOL 13 101511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 102511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 103511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef EAI_MAX 104511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define EAI_MAX 14 105511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 106511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 107511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NETDB_INTERNAL 108511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define NETDB_INTERNAL -1 /* see errno */ 109511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 110511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 111511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef AI_MASK 112511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* valid flags for addrinfo */ 113511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST) 114511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 115511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 116511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif /* HAVE_ADDRINFO */ 117511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 118511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 119511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Constants for getnameinfo() 120511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 121511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_MAXHOST 122511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define NI_MAXHOST 1025 123511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 124511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_MAXSERV 125511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define NI_MAXSERV 32 126511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 127511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 128511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* 129511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * Flag values for getnameinfo() 130511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall */ 131511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_NOFQDN 132511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define NI_NOFQDN 0x00000001 133511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 134511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_NUMERICHOST 135511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define NI_NUMERICHOST 0x00000002 136511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 137511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_NAMEREQD 138511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define NI_NAMEREQD 0x00000004 139511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 140511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_NUMERICSERV 141511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define NI_NUMERICSERV 0x00000008 142511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 143511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifndef NI_DGRAM 144511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define NI_DGRAM 0x00000010 145511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 146511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 147