156893Sfenner/* 256893Sfenner * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project. 356893Sfenner * All rights reserved. 4127668Sbms * 556893Sfenner * Redistribution and use in source and binary forms, with or without 656893Sfenner * modification, are permitted provided that the following conditions 756893Sfenner * are met: 856893Sfenner * 1. Redistributions of source code must retain the above copyright 956893Sfenner * notice, this list of conditions and the following disclaimer. 1056893Sfenner * 2. Redistributions in binary form must reproduce the above copyright 1156893Sfenner * notice, this list of conditions and the following disclaimer in the 1256893Sfenner * documentation and/or other materials provided with the distribution. 1356893Sfenner * 3. Neither the name of the project nor the names of its contributors 1456893Sfenner * may be used to endorse or promote products derived from this software 1556893Sfenner * without specific prior written permission. 16127668Sbms * 1756893Sfenner * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 1856893Sfenner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1956893Sfenner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2056893Sfenner * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 2156893Sfenner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2256893Sfenner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2356893Sfenner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2456893Sfenner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2556893Sfenner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2656893Sfenner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2756893Sfenner * SUCH DAMAGE. 2856893Sfenner */ 2956893Sfenner 30190207Srpaulo/* $Id: addrinfo.h,v 1.4 2002-06-11 17:13:36 itojun Exp $ */ 3156893Sfenner 3256893Sfenner#ifndef HAVE_ADDRINFO 3356893Sfenner 3456893Sfenner/* 3556893Sfenner * Error return codes from getaddrinfo() 3656893Sfenner */ 3756893Sfenner#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */ 3856893Sfenner#define EAI_AGAIN 2 /* temporary failure in name resolution */ 3956893Sfenner#define EAI_BADFLAGS 3 /* invalid value for ai_flags */ 4056893Sfenner#define EAI_FAIL 4 /* non-recoverable failure in name resolution */ 4156893Sfenner#define EAI_FAMILY 5 /* ai_family not supported */ 4256893Sfenner#define EAI_MEMORY 6 /* memory allocation failure */ 4356893Sfenner#define EAI_NODATA 7 /* no address associated with hostname */ 4456893Sfenner#define EAI_NONAME 8 /* hostname nor servname provided, or not known */ 4556893Sfenner#define EAI_SERVICE 9 /* servname not supported for ai_socktype */ 4656893Sfenner#define EAI_SOCKTYPE 10 /* ai_socktype not supported */ 4756893Sfenner#define EAI_SYSTEM 11 /* system error returned in errno */ 4856893Sfenner#define EAI_BADHINTS 12 4956893Sfenner#define EAI_PROTOCOL 13 5056893Sfenner#define EAI_MAX 14 5156893Sfenner 5256893Sfenner/* internal error */ 5356893Sfenner#define NETDB_INTERNAL -1 /* see errno */ 5456893Sfenner 5556893Sfenner/* 5656893Sfenner * Flag values for getaddrinfo() 5756893Sfenner */ 5856893Sfenner#define AI_PASSIVE 0x00000001 /* get address to use bind() */ 5956893Sfenner#define AI_CANONNAME 0x00000002 /* fill ai_canonname */ 6056893Sfenner#define AI_NUMERICHOST 0x00000004 /* prevent name resolution */ 6156893Sfenner/* valid flags for addrinfo */ 6256893Sfenner#define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST) 6356893Sfenner 6456893Sfenner#define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */ 6556893Sfenner#define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */ 6656893Sfenner#define AI_ADDRCONFIG 0x00000400 /* only if any address is assigned */ 6756893Sfenner#define AI_V4MAPPED 0x00000800 /* accept IPv4-mapped IPv6 address */ 6856893Sfenner/* special recommended flags for getipnodebyname */ 6956893Sfenner#define AI_DEFAULT (AI_V4MAPPED_CFG | AI_ADDRCONFIG) 7056893Sfenner 7156893Sfennerstruct addrinfo { 7256893Sfenner int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ 7356893Sfenner int ai_family; /* PF_xxx */ 7456893Sfenner int ai_socktype; /* SOCK_xxx */ 7556893Sfenner int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ 7656893Sfenner size_t ai_addrlen; /* length of ai_addr */ 7756893Sfenner char *ai_canonname; /* canonical name for hostname */ 7856893Sfenner struct sockaddr *ai_addr; /* binary address */ 7956893Sfenner struct addrinfo *ai_next; /* next structure in linked list */ 8056893Sfenner}; 8156893Sfenner 8275115Sfennerextern void freeaddrinfo (struct addrinfo *); 8375115Sfennerextern void freehostent (struct hostent *); 8475115Sfennerextern int getnameinfo (const struct sockaddr *, size_t, char *, 8575115Sfenner size_t, char *, size_t, int); 8675115Sfennerextern struct hostent *getipnodebyaddr (const void *, size_t, int, int *); 8775115Sfennerextern struct hostent *getipnodebyname (const char *, int, int, int *); 8875115Sfennerextern int inet_pton (int, const char *, void *); 8975115Sfennerextern const char *inet_ntop (int, const void *, char *, size_t); 9056893Sfenner#endif /* HAVE_ADDRINFO */ 9156893Sfenner 9256893Sfenner/* 9356893Sfenner * Constants for getnameinfo() 9456893Sfenner */ 9556893Sfenner#ifndef NI_MAXHOST 9656893Sfenner#define NI_MAXHOST 1025 9756893Sfenner#endif 9856893Sfenner#ifndef NI_MAXSERV 9956893Sfenner#define NI_MAXSERV 32 10056893Sfenner#endif 10156893Sfenner 10256893Sfenner/* 10356893Sfenner * Flag values for getnameinfo() 10456893Sfenner */ 10556893Sfenner#ifndef NI_NOFQDN 10656893Sfenner#define NI_NOFQDN 0x00000001 10756893Sfenner#endif 10856893Sfenner#ifndef NI_NUMERICHOST 10956893Sfenner#define NI_NUMERICHOST 0x00000002 11056893Sfenner#endif 11156893Sfenner#ifndef NI_NAMEREQD 11256893Sfenner#define NI_NAMEREQD 0x00000004 11356893Sfenner#endif 11456893Sfenner#ifndef NI_NUMERICSERV 11556893Sfenner#define NI_NUMERICSERV 0x00000008 11656893Sfenner#endif 11756893Sfenner#ifndef NI_DGRAM 11856893Sfenner#define NI_DGRAM 0x00000010 11956893Sfenner#endif 120