1 |
/*- |
2 |
* Copyright (c) 1980, 1983, 1988, 1993 |
3 |
* The Regents of the University of California. 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. All advertising materials mentioning features or use of this software |
14 |
* must display the following acknowledgement: |
15 |
* This product includes software developed by the University of |
16 |
* California, Berkeley and its contributors. |
17 |
* 4. Neither the name of the University nor the names of its contributors |
18 |
* may be used to endorse or promote products derived from this software |
19 |
* without specific prior written permission. |
20 |
* |
21 |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
22 |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
23 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
24 |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
25 |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
26 |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
27 |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
28 |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
29 |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
30 |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
31 |
* SUCH DAMAGE. |
32 |
* |
33 |
* - |
34 |
* Portions Copyright (c) 1993 by Digital Equipment Corporation. |
35 |
* |
36 |
* Permission to use, copy, modify, and distribute this software for any |
37 |
* purpose with or without fee is hereby granted, provided that the above |
38 |
* copyright notice and this permission notice appear in all copies, and that |
39 |
* the name of Digital Equipment Corporation not be used in advertising or |
40 |
* publicity pertaining to distribution of the document or software without |
41 |
* specific, written prior permission. |
42 |
* |
43 |
* THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL |
44 |
* WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES |
45 |
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT |
46 |
* CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL |
47 |
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
48 |
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS |
49 |
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS |
50 |
* SOFTWARE. |
51 |
* - |
52 |
* --Copyright-- |
53 |
*/ |
54 |
|
55 |
/* |
56 |
* @(#)netdb.h 8.1 (Berkeley) 6/2/93 |
57 |
* From: Id: netdb.h,v 8.9 1996/11/19 08:39:29 vixie Exp $ |
58 |
* $FreeBSD: src/include/netdb.h,v 1.38.2.1 2005/07/22 20:17:30 ume Exp $ |
59 |
*/ |
60 |
|
61 |
#ifndef _NETDB_H_ |
62 |
#define _NETDB_H_ |
63 |
|
64 |
#include <sys/cdefs.h> |
65 |
#include <sys/_types.h> |
66 |
|
67 |
#ifndef _SIZE_T_DECLARED |
68 |
typedef __size_t size_t; |
69 |
#define _SIZE_T_DECLARED |
70 |
#endif |
71 |
|
72 |
#ifndef _SOCKLEN_T_DECLARED |
73 |
typedef __socklen_t socklen_t; |
74 |
#define _SOCKLEN_T_DECLARED |
75 |
#endif |
76 |
|
77 |
#ifndef _UINT32_T_DECLARED |
78 |
typedef __uint32_t uint32_t; |
79 |
#define _UINT32_T_DECLARED |
80 |
#endif |
81 |
|
82 |
#ifndef _PATH_HEQUIV |
83 |
# define _PATH_HEQUIV "/etc/hosts.equiv" |
84 |
#endif |
85 |
#define _PATH_HOSTS "/etc/hosts" |
86 |
#define _PATH_NETWORKS "/etc/networks" |
87 |
#define _PATH_PROTOCOLS "/etc/protocols" |
88 |
#define _PATH_SERVICES "/etc/services" |
89 |
|
90 |
#define h_errno (*__h_error()) |
91 |
|
92 |
/* |
93 |
* Structures returned by network data base library. All addresses are |
94 |
* supplied in host order, and returned in network order (suitable for |
95 |
* use in system calls). |
96 |
*/ |
97 |
struct hostent { |
98 |
char *h_name; /* official name of host */ |
99 |
char **h_aliases; /* alias list */ |
100 |
int h_addrtype; /* host address type */ |
101 |
int h_length; /* length of address */ |
102 |
char **h_addr_list; /* list of addresses from name server */ |
103 |
#define h_addr h_addr_list[0] /* address, for backward compatibility */ |
104 |
}; |
105 |
|
106 |
struct netent { |
107 |
char *n_name; /* official name of net */ |
108 |
char **n_aliases; /* alias list */ |
109 |
int n_addrtype; /* net address type */ |
110 |
uint32_t n_net; /* network # */ |
111 |
}; |
112 |
|
113 |
struct servent { |
114 |
char *s_name; /* official service name */ |
115 |
char **s_aliases; /* alias list */ |
116 |
int s_port; /* port # */ |
117 |
char *s_proto; /* protocol to use */ |
118 |
}; |
119 |
|
120 |
struct protoent { |
121 |
char *p_name; /* official protocol name */ |
122 |
char **p_aliases; /* alias list */ |
123 |
int p_proto; /* protocol # */ |
124 |
}; |
125 |
|
126 |
struct addrinfo { |
127 |
int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */ |
128 |
int ai_family; /* PF_xxx */ |
129 |
int ai_socktype; /* SOCK_xxx */ |
130 |
int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ |
131 |
socklen_t ai_addrlen; /* length of ai_addr */ |
132 |
char *ai_canonname; /* canonical name for hostname */ |
133 |
struct sockaddr *ai_addr; /* binary address */ |
134 |
struct addrinfo *ai_next; /* next structure in linked list */ |
135 |
}; |
136 |
|
137 |
/* |
138 |
* Error return codes from gethostbyname() and gethostbyaddr() |
139 |
* (left in h_errno). |
140 |
*/ |
141 |
|
142 |
#define NETDB_INTERNAL -1 /* see errno */ |
143 |
#define NETDB_SUCCESS 0 /* no problem */ |
144 |
#define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */ |
145 |
#define TRY_AGAIN 2 /* Non-Authoritative Host not found, or SERVERFAIL */ |
146 |
#define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ |
147 |
#define NO_DATA 4 /* Valid name, no data record of requested type */ |
148 |
#define NO_ADDRESS NO_DATA /* no address, look for MX record */ |
149 |
|
150 |
/* |
151 |
* Error return codes from getaddrinfo() |
152 |
*/ |
153 |
#if 0 |
154 |
/* obsoleted */ |
155 |
#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */ |
156 |
#endif |
157 |
#define EAI_AGAIN 2 /* temporary failure in name resolution */ |
158 |
#define EAI_BADFLAGS 3 /* invalid value for ai_flags */ |
159 |
#define EAI_FAIL 4 /* non-recoverable failure in name resolution */ |
160 |
#define EAI_FAMILY 5 /* ai_family not supported */ |
161 |
#define EAI_MEMORY 6 /* memory allocation failure */ |
162 |
#if 0 |
163 |
/* obsoleted */ |
164 |
#define EAI_NODATA 7 /* no address associated with hostname */ |
165 |
#endif |
166 |
#define EAI_NONAME 8 /* hostname nor servname provided, or not known */ |
167 |
#define EAI_SERVICE 9 /* servname not supported for ai_socktype */ |
168 |
#define EAI_SOCKTYPE 10 /* ai_socktype not supported */ |
169 |
#define EAI_SYSTEM 11 /* system error returned in errno */ |
170 |
#define EAI_BADHINTS 12 |
171 |
#define EAI_PROTOCOL 13 |
172 |
#define EAI_MAX 14 |
173 |
|
174 |
/* |
175 |
* Flag values for getaddrinfo() |
176 |
*/ |
177 |
#define AI_PASSIVE 0x00000001 /* get address to use bind() */ |
178 |
#define AI_CANONNAME 0x00000002 /* fill ai_canonname */ |
179 |
#define AI_NUMERICHOST 0x00000004 /* prevent host name resolution */ |
180 |
#define AI_NUMERICSERV 0x00000008 /* prevent service name resolution */ |
181 |
/* valid flags for addrinfo (not a standard def, apps should not use it) */ |
182 |
#define AI_MASK \ |
183 |
(AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV | \ |
184 |
AI_ADDRCONFIG) |
185 |
|
186 |
#define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */ |
187 |
#define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */ |
188 |
#define AI_ADDRCONFIG 0x00000400 /* only if any address is assigned */ |
189 |
#define AI_V4MAPPED 0x00000800 /* accept IPv4-mapped IPv6 address */ |
190 |
/* special recommended flags for getipnodebyname */ |
191 |
#define AI_DEFAULT (AI_V4MAPPED_CFG | AI_ADDRCONFIG) |
192 |
|
193 |
/* |
194 |
* Constants for getnameinfo() |
195 |
*/ |
196 |
#define NI_MAXHOST 1025 |
197 |
#define NI_MAXSERV 32 |
198 |
|
199 |
/* |
200 |
* Flag values for getnameinfo() |
201 |
*/ |
202 |
#define NI_NOFQDN 0x00000001 |
203 |
#define NI_NUMERICHOST 0x00000002 |
204 |
#define NI_NAMEREQD 0x00000004 |
205 |
#define NI_NUMERICSERV 0x00000008 |
206 |
#define NI_DGRAM 0x00000010 |
207 |
#if 0 /* obsolete */ |
208 |
#define NI_WITHSCOPEID 0x00000020 |
209 |
#endif |
210 |
|
211 |
/* |
212 |
* Scope delimit character |
213 |
*/ |
214 |
#define SCOPE_DELIMITER '%' |
215 |
|
216 |
__BEGIN_DECLS |
217 |
void endhostent(void); |
218 |
void endnetent(void); |
219 |
void endnetgrent(void); |
220 |
void endprotoent(void); |
221 |
void endservent(void); |
222 |
void freehostent(struct hostent *); |
223 |
struct hostent *gethostbyaddr(const char *, int, int); |
224 |
struct hostent *gethostbyname(const char *); |
225 |
struct hostent *gethostbyname2(const char *, int); |
226 |
struct hostent *gethostent(void); |
227 |
struct hostent *getipnodebyaddr(const void *, size_t, int, int *); |
228 |
struct hostent *getipnodebyname(const char *, int, int, int *); |
229 |
struct netent *getnetbyaddr(uint32_t, int); |
230 |
struct netent *getnetbyname(const char *); |
231 |
struct netent *getnetent(void); |
232 |
int getnetgrent(char **, char **, char **); |
233 |
struct protoent *getprotobyname(const char *); |
234 |
struct protoent *getprotobynumber(int); |
235 |
struct protoent *getprotoent(void); |
236 |
struct servent *getservbyname(const char *, const char *); |
237 |
struct servent *getservbyport(int, const char *); |
238 |
struct servent *getservent(void); |
239 |
void herror(const char *); |
240 |
__const char *hstrerror(int); |
241 |
int innetgr(const char *, const char *, const char *, const char *); |
242 |
void sethostent(int); |
243 |
/* void sethostfile(const char *); */ |
244 |
void setnetent(int); |
245 |
void setprotoent(int); |
246 |
int getaddrinfo(const char *, const char *, |
247 |
const struct addrinfo *, struct addrinfo **); |
248 |
int getnameinfo(const struct sockaddr *, socklen_t, char *, |
249 |
size_t, char *, size_t, int); |
250 |
void freeaddrinfo(struct addrinfo *); |
251 |
const char *gai_strerror(int); |
252 |
void setnetgrent(const char *); |
253 |
void setservent(int); |
254 |
|
255 |
/* |
256 |
* PRIVATE functions specific to the FreeBSD implementation |
257 |
*/ |
258 |
|
259 |
/* DO NOT USE THESE, THEY ARE SUBJECT TO CHANGE AND ARE NOT PORTABLE!!! */ |
260 |
int * __h_error(void); |
261 |
__END_DECLS |
262 |
|
263 |
#endif /* !_NETDB_H_ */ |