1  /* Copyright (C) 1996-2004, 2009, 2010, 2011 Free Software Foundation, Inc.
2   This file is part of the GNU C Library.
3
4   The GNU C Library is free software; you can redistribute it and/or
5   modify it under the terms of the GNU Lesser General Public
6   License as published by the Free Software Foundation; either
7   version 2.1 of the License, or (at your option) any later version.
8
9   The GNU C Library is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12   Lesser General Public License for more details.
13
14   You should have received a copy of the GNU Lesser General Public
15   License along with the GNU C Library; if not, write to the Free
16   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17   02111-1307 USA.  */
18
19/* All data returned by the network data base library are supplied in
20   host order and returned in network order (suitable for use in
21   system calls).  */
22
23#ifndef	_NETDB_H
24#define	_NETDB_H	1
25
26#include <features.h>
27
28#include <netinet/in.h>
29#include <stdint.h>
30#ifdef __USE_MISC
31/* This is necessary to make this include file properly replace the
32   Sun version.  */
33# include <rpc/netdb.h>
34#endif
35
36#ifdef __USE_GNU
37# define __need_sigevent_t
38# include <bits/siginfo.h>
39# define __need_timespec
40# include <time.h>
41#endif
42
43#include <bits/netdb.h>
44
45/* Absolute file name for network data base files.  */
46#define	_PATH_HEQUIV		"/etc/hosts.equiv"
47#define	_PATH_HOSTS		"/etc/hosts"
48#define	_PATH_NETWORKS		"/etc/networks"
49#define	_PATH_NSSWITCH_CONF	"/etc/nsswitch.conf"
50#define	_PATH_PROTOCOLS		"/etc/protocols"
51#define	_PATH_SERVICES		"/etc/services"
52
53
54__BEGIN_DECLS
55
56#if defined __USE_MISC || !defined __USE_XOPEN2K8
57/* Error status for non-reentrant lookup functions.
58   We use a macro to access always the thread-specific `h_errno' variable.  */
59# define h_errno (*__h_errno_location ())
60
61/* Function to get address of global `h_errno' variable.  */
62extern int *__h_errno_location (void) __THROW __attribute__ ((__const__));
63
64
65/* Possible values left in `h_errno'.  */
66# define HOST_NOT_FOUND	1	/* Authoritative Answer Host not found.  */
67# define TRY_AGAIN	2	/* Non-Authoritative Host not found,
68				   or SERVERFAIL.  */
69# define NO_RECOVERY	3	/* Non recoverable errors, FORMERR, REFUSED,
70				   NOTIMP.  */
71# define NO_DATA	4	/* Valid name, no data record of requested
72				   type.  */
73#endif
74#if defined __USE_MISC || defined __USE_GNU
75# define NETDB_INTERNAL	-1	/* See errno.  */
76# define NETDB_SUCCESS	0	/* No problem.  */
77# define NO_ADDRESS	NO_DATA	/* No address, look for MX record.  */
78#endif
79
80#ifdef __USE_XOPEN2K
81/* Highest reserved Internet port number.  */
82# define IPPORT_RESERVED	1024
83#endif
84
85#ifdef __USE_GNU
86/* Scope delimiter for getaddrinfo(), getnameinfo().  */
87# define SCOPE_DELIMITER	'%'
88#endif
89
90#ifdef __USE_MISC
91/* Print error indicated by `h_errno' variable on standard error.  STR
92   if non-null is printed before the error string.  */
93extern void herror (__const char *__str) __THROW;
94
95/* Return string associated with error ERR_NUM.  */
96extern __const char *hstrerror (int __err_num) __THROW;
97#endif
98
99
100/* Description of data base entry for a single host.  */
101struct hostent
102{
103  char *h_name;			/* Official name of host.  */
104  char **h_aliases;		/* Alias list.  */
105  int h_addrtype;		/* Host address type.  */
106  int h_length;			/* Length of address.  */
107  char **h_addr_list;		/* List of addresses from name server.  */
108#if defined __USE_MISC || defined __USE_GNU
109# define	h_addr	h_addr_list[0] /* Address, for backward compatibility.*/
110#endif
111};
112
113/* Open host data base files and mark them as staying open even after
114   a later search if STAY_OPEN is non-zero.
115
116   This function is a possible cancellation point and therefore not
117   marked with __THROW.  */
118extern void sethostent (int __stay_open);
119
120/* Close host data base files and clear `stay open' flag.
121
122   This function is a possible cancellation point and therefore not
123   marked with __THROW.  */
124extern void endhostent (void);
125
126/* Get next entry from host data base file.  Open data base if
127   necessary.
128
129   This function is a possible cancellation point and therefore not
130   marked with __THROW.  */
131extern struct hostent *gethostent (void);
132
133/* Return entry from host data base which address match ADDR with
134   length LEN and type TYPE.
135
136   This function is a possible cancellation point and therefore not
137   marked with __THROW.  */
138extern struct hostent *gethostbyaddr (__const void *__addr, __socklen_t __len,
139				      int __type);
140
141/* Return entry from host data base for host with NAME.
142
143   This function is a possible cancellation point and therefore not
144   marked with __THROW.  */
145extern struct hostent *gethostbyname (__const char *__name);
146
147#ifdef __USE_MISC
148/* Return entry from host data base for host with NAME.  AF must be
149   set to the address type which is `AF_INET' for IPv4 or `AF_INET6'
150   for IPv6.
151
152   This function is not part of POSIX and therefore no official
153   cancellation point.  But due to similarity with an POSIX interface
154   or due to the implementation it is a cancellation point and
155   therefore not marked with __THROW.  */
156extern struct hostent *gethostbyname2 (__const char *__name, int __af);
157
158/* Reentrant versions of the functions above.  The additional
159   arguments specify a buffer of BUFLEN starting at BUF.  The last
160   argument is a pointer to a variable which gets the value which
161   would be stored in the global variable `herrno' by the
162   non-reentrant functions.
163
164   These functions are not part of POSIX and therefore no official
165   cancellation point.  But due to similarity with an POSIX interface
166   or due to the implementation they are cancellation points and
167   therefore not marked with __THROW.  */
168extern int gethostent_r (struct hostent *__restrict __result_buf,
169			 char *__restrict __buf, size_t __buflen,
170			 struct hostent **__restrict __result,
171			 int *__restrict __h_errnop);
172
173extern int gethostbyaddr_r (__const void *__restrict __addr, __socklen_t __len,
174			    int __type,
175			    struct hostent *__restrict __result_buf,
176			    char *__restrict __buf, size_t __buflen,
177			    struct hostent **__restrict __result,
178			    int *__restrict __h_errnop);
179
180extern int gethostbyname_r (__const char *__restrict __name,
181			    struct hostent *__restrict __result_buf,
182			    char *__restrict __buf, size_t __buflen,
183			    struct hostent **__restrict __result,
184			    int *__restrict __h_errnop);
185
186extern int gethostbyname2_r (__const char *__restrict __name, int __af,
187			     struct hostent *__restrict __result_buf,
188			     char *__restrict __buf, size_t __buflen,
189			     struct hostent **__restrict __result,
190			     int *__restrict __h_errnop);
191#endif	/* misc */
192
193
194/* Open network data base files and mark them as staying open even
195   after a later search if STAY_OPEN is non-zero.
196
197   This function is a possible cancellation point and therefore not
198   marked with __THROW.  */
199extern void setnetent (int __stay_open);
200
201/* Close network data base files and clear `stay open' flag.
202
203   This function is a possible cancellation point and therefore not
204   marked with __THROW.  */
205extern void endnetent (void);
206
207/* Get next entry from network data base file.  Open data base if
208   necessary.
209
210   This function is a possible cancellation point and therefore not
211   marked with __THROW.  */
212extern struct netent *getnetent (void);
213
214/* Return entry from network data base which address match NET and
215   type TYPE.
216
217   This function is a possible cancellation point and therefore not
218   marked with __THROW.  */
219extern struct netent *getnetbyaddr (uint32_t __net, int __type);
220
221/* Return entry from network data base for network with NAME.
222
223   This function is a possible cancellation point and therefore not
224   marked with __THROW.  */
225extern struct netent *getnetbyname (__const char *__name);
226
227#ifdef	__USE_MISC
228/* Reentrant versions of the functions above.  The additional
229   arguments specify a buffer of BUFLEN starting at BUF.  The last
230   argument is a pointer to a variable which gets the value which
231   would be stored in the global variable `herrno' by the
232   non-reentrant functions.
233
234   These functions are not part of POSIX and therefore no official
235   cancellation point.  But due to similarity with an POSIX interface
236   or due to the implementation they are cancellation points and
237   therefore not marked with __THROW.  */
238extern int getnetent_r (struct netent *__restrict __result_buf,
239			char *__restrict __buf, size_t __buflen,
240			struct netent **__restrict __result,
241			int *__restrict __h_errnop);
242
243extern int getnetbyaddr_r (uint32_t __net, int __type,
244			   struct netent *__restrict __result_buf,
245			   char *__restrict __buf, size_t __buflen,
246			   struct netent **__restrict __result,
247			   int *__restrict __h_errnop);
248
249extern int getnetbyname_r (__const char *__restrict __name,
250			   struct netent *__restrict __result_buf,
251			   char *__restrict __buf, size_t __buflen,
252			   struct netent **__restrict __result,
253			   int *__restrict __h_errnop);
254#endif	/* misc */
255
256
257/* Description of data base entry for a single service.  */
258struct servent
259{
260  char *s_name;			/* Official service name.  */
261  char **s_aliases;		/* Alias list.  */
262  int s_port;			/* Port number.  */
263  char *s_proto;		/* Protocol to use.  */
264};
265
266/* Open service data base files and mark them as staying open even
267   after a later search if STAY_OPEN is non-zero.
268
269   This function is a possible cancellation point and therefore not
270   marked with __THROW.  */
271extern void setservent (int __stay_open);
272
273/* Close service data base files and clear `stay open' flag.
274
275   This function is a possible cancellation point and therefore not
276   marked with __THROW.  */
277extern void endservent (void);
278
279/* Get next entry from service data base file.  Open data base if
280   necessary.
281
282   This function is a possible cancellation point and therefore not
283   marked with __THROW.  */
284extern struct servent *getservent (void);
285
286/* Return entry from network data base for network with NAME and
287   protocol PROTO.
288
289   This function is a possible cancellation point and therefore not
290   marked with __THROW.  */
291extern struct servent *getservbyname (__const char *__name,
292				      __const char *__proto);
293
294/* Return entry from service data base which matches port PORT and
295   protocol PROTO.
296
297   This function is a possible cancellation point and therefore not
298   marked with __THROW.  */
299extern struct servent *getservbyport (int __port, __const char *__proto);
300
301
302#ifdef	__USE_MISC
303/* Reentrant versions of the functions above.  The additional
304   arguments specify a buffer of BUFLEN starting at BUF.
305
306   These functions are not part of POSIX and therefore no official
307   cancellation point.  But due to similarity with an POSIX interface
308   or due to the implementation they are cancellation points and
309   therefore not marked with __THROW.  */
310extern int getservent_r (struct servent *__restrict __result_buf,
311			 char *__restrict __buf, size_t __buflen,
312			 struct servent **__restrict __result);
313
314extern int getservbyname_r (__const char *__restrict __name,
315			    __const char *__restrict __proto,
316			    struct servent *__restrict __result_buf,
317			    char *__restrict __buf, size_t __buflen,
318			    struct servent **__restrict __result);
319
320extern int getservbyport_r (int __port, __const char *__restrict __proto,
321			    struct servent *__restrict __result_buf,
322			    char *__restrict __buf, size_t __buflen,
323			    struct servent **__restrict __result);
324#endif	/* misc */
325
326
327/* Description of data base entry for a single service.  */
328struct protoent
329{
330  char *p_name;			/* Official protocol name.  */
331  char **p_aliases;		/* Alias list.  */
332  int p_proto;			/* Protocol number.  */
333};
334
335/* Open protocol data base files and mark them as staying open even
336   after a later search if STAY_OPEN is non-zero.
337
338   This function is a possible cancellation point and therefore not
339   marked with __THROW.  */
340extern void setprotoent (int __stay_open);
341
342/* Close protocol data base files and clear `stay open' flag.
343
344   This function is a possible cancellation point and therefore not
345   marked with __THROW.  */
346extern void endprotoent (void);
347
348/* Get next entry from protocol data base file.  Open data base if
349   necessary.
350
351   This function is a possible cancellation point and therefore not
352   marked with __THROW.  */
353extern struct protoent *getprotoent (void);
354
355/* Return entry from protocol data base for network with NAME.
356
357   This function is a possible cancellation point and therefore not
358   marked with __THROW.  */
359extern struct protoent *getprotobyname (__const char *__name);
360
361/* Return entry from protocol data base which number is PROTO.
362
363   This function is a possible cancellation point and therefore not
364   marked with __THROW.  */
365extern struct protoent *getprotobynumber (int __proto);
366
367
368#ifdef	__USE_MISC
369/* Reentrant versions of the functions above.  The additional
370   arguments specify a buffer of BUFLEN starting at BUF.
371
372   These functions are not part of POSIX and therefore no official
373   cancellation point.  But due to similarity with an POSIX interface
374   or due to the implementation they are cancellation points and
375   therefore not marked with __THROW.  */
376extern int getprotoent_r (struct protoent *__restrict __result_buf,
377			  char *__restrict __buf, size_t __buflen,
378			  struct protoent **__restrict __result);
379
380extern int getprotobyname_r (__const char *__restrict __name,
381			     struct protoent *__restrict __result_buf,
382			     char *__restrict __buf, size_t __buflen,
383			     struct protoent **__restrict __result);
384
385extern int getprotobynumber_r (int __proto,
386			       struct protoent *__restrict __result_buf,
387			       char *__restrict __buf, size_t __buflen,
388			       struct protoent **__restrict __result);
389
390
391/* Establish network group NETGROUP for enumeration.
392
393   This function is not part of POSIX and therefore no official
394   cancellation point.  But due to similarity with an POSIX interface
395   or due to the implementation it is a cancellation point and
396   therefore not marked with __THROW.  */
397extern int setnetgrent (__const char *__netgroup);
398
399/* Free all space allocated by previous `setnetgrent' call.
400
401   This function is not part of POSIX and therefore no official
402   cancellation point.  But due to similarity with an POSIX interface
403   or due to the implementation it is a cancellation point and
404   therefore not marked with __THROW.  */
405extern void endnetgrent (void);
406
407/* Get next member of netgroup established by last `setnetgrent' call
408   and return pointers to elements in HOSTP, USERP, and DOMAINP.
409
410   This function is not part of POSIX and therefore no official
411   cancellation point.  But due to similarity with an POSIX interface
412   or due to the implementation it is a cancellation point and
413   therefore not marked with __THROW.  */
414extern int getnetgrent (char **__restrict __hostp,
415			char **__restrict __userp,
416			char **__restrict __domainp);
417
418
419/* Test whether NETGROUP contains the triple (HOST,USER,DOMAIN).
420
421   This function is not part of POSIX and therefore no official
422   cancellation point.  But due to similarity with an POSIX interface
423   or due to the implementation it is a cancellation point and
424   therefore not marked with __THROW.  */
425extern int innetgr (__const char *__netgroup, __const char *__host,
426		    __const char *__user, __const char *__domain);
427
428/* Reentrant version of `getnetgrent' where result is placed in BUFFER.
429
430   This function is not part of POSIX and therefore no official
431   cancellation point.  But due to similarity with an POSIX interface
432   or due to the implementation it is a cancellation point and
433   therefore not marked with __THROW.  */
434extern int getnetgrent_r (char **__restrict __hostp,
435			  char **__restrict __userp,
436			  char **__restrict __domainp,
437			  char *__restrict __buffer, size_t __buflen);
438#endif	/* misc */
439
440
441#ifdef __USE_BSD
442/* Call `rshd' at port RPORT on remote machine *AHOST to execute CMD.
443   The local user is LOCUSER, on the remote machine the command is
444   executed as REMUSER.  In *FD2P the descriptor to the socket for the
445   connection is returned.  The caller must have the right to use a
446   reserved port.  When the function returns *AHOST contains the
447   official host name.
448
449   This function is not part of POSIX and therefore no official
450   cancellation point.  But due to similarity with an POSIX interface
451   or due to the implementation it is a cancellation point and
452   therefore not marked with __THROW.  */
453extern int rcmd (char **__restrict __ahost, unsigned short int __rport,
454		 __const char *__restrict __locuser,
455		 __const char *__restrict __remuser,
456		 __const char *__restrict __cmd, int *__restrict __fd2p);
457
458/* This is the equivalent function where the protocol can be selected
459   and which therefore can be used for IPv6.
460
461   This function is not part of POSIX and therefore no official
462   cancellation point.  But due to similarity with an POSIX interface
463   or due to the implementation it is a cancellation point and
464   therefore not marked with __THROW.  */
465extern int rcmd_af (char **__restrict __ahost, unsigned short int __rport,
466		    __const char *__restrict __locuser,
467		    __const char *__restrict __remuser,
468		    __const char *__restrict __cmd, int *__restrict __fd2p,
469		    sa_family_t __af);
470
471/* Call `rexecd' at port RPORT on remote machine *AHOST to execute
472   CMD.  The process runs at the remote machine using the ID of user
473   NAME whose cleartext password is PASSWD.  In *FD2P the descriptor
474   to the socket for the connection is returned.  When the function
475   returns *AHOST contains the official host name.
476
477   This function is not part of POSIX and therefore no official
478   cancellation point.  But due to similarity with an POSIX interface
479   or due to the implementation it is a cancellation point and
480   therefore not marked with __THROW.  */
481extern int rexec (char **__restrict __ahost, int __rport,
482		  __const char *__restrict __name,
483		  __const char *__restrict __pass,
484		  __const char *__restrict __cmd, int *__restrict __fd2p);
485
486/* This is the equivalent function where the protocol can be selected
487   and which therefore can be used for IPv6.
488
489   This function is not part of POSIX and therefore no official
490   cancellation point.  But due to similarity with an POSIX interface
491   or due to the implementation it is a cancellation point and
492   therefore not marked with __THROW.  */
493extern int rexec_af (char **__restrict __ahost, int __rport,
494		     __const char *__restrict __name,
495		     __const char *__restrict __pass,
496		     __const char *__restrict __cmd, int *__restrict __fd2p,
497		     sa_family_t __af);
498
499/* Check whether user REMUSER on system RHOST is allowed to login as LOCUSER.
500   If SUSER is not zero the user tries to become superuser.  Return 0 if
501   it is possible.
502
503   This function is not part of POSIX and therefore no official
504   cancellation point.  But due to similarity with an POSIX interface
505   or due to the implementation it is a cancellation point and
506   therefore not marked with __THROW.  */
507extern int ruserok (__const char *__rhost, int __suser,
508		    __const char *__remuser, __const char *__locuser);
509
510/* This is the equivalent function where the protocol can be selected
511   and which therefore can be used for IPv6.
512
513   This function is not part of POSIX and therefore no official
514   cancellation point.  But due to similarity with an POSIX interface
515   or due to the implementation it is a cancellation point and
516   therefore not marked with __THROW.  */
517extern int ruserok_af (__const char *__rhost, int __suser,
518		       __const char *__remuser, __const char *__locuser,
519		       sa_family_t __af);
520
521/* Check whether user REMUSER on system indicated by IPv4 address
522   RADDR is allowed to login as LOCUSER.  Non-IPv4 (e.g., IPv6) are
523   not supported.  If SUSER is not zero the user tries to become
524   superuser.  Return 0 if it is possible.
525
526   This function is not part of POSIX and therefore no official
527   cancellation point.  But due to similarity with an POSIX interface
528   or due to the implementation it is a cancellation point and
529   therefore not marked with __THROW.  */
530extern int iruserok (uint32_t __raddr, int __suser,
531		     __const char *__remuser, __const char *__locuser);
532
533/* This is the equivalent function where the pfamiliy if the address
534   pointed to by RADDR is determined by the value of AF.  It therefore
535   can be used for IPv6
536
537   This function is not part of POSIX and therefore no official
538   cancellation point.  But due to similarity with an POSIX interface
539   or due to the implementation it is a cancellation point and
540   therefore not marked with __THROW.  */
541extern int iruserok_af (__const void *__raddr, int __suser,
542			__const char *__remuser, __const char *__locuser,
543			sa_family_t __af);
544
545/* Try to allocate reserved port, returning a descriptor for a socket opened
546   at this port or -1 if unsuccessful.  The search for an available port
547   will start at ALPORT and continues with lower numbers.
548
549   This function is not part of POSIX and therefore no official
550   cancellation point.  But due to similarity with an POSIX interface
551   or due to the implementation it is a cancellation point and
552   therefore not marked with __THROW.  */
553extern int rresvport (int *__alport);
554
555/* This is the equivalent function where the protocol can be selected
556   and which therefore can be used for IPv6.
557
558   This function is not part of POSIX and therefore no official
559   cancellation point.  But due to similarity with an POSIX interface
560   or due to the implementation it is a cancellation point and
561   therefore not marked with __THROW.  */
562extern int rresvport_af (int *__alport, sa_family_t __af);
563#endif
564
565
566/* Extension from POSIX.1g.  */
567#ifdef	__USE_POSIX
568/* Structure to contain information about address of a service provider.  */
569struct addrinfo
570{
571  int ai_flags;			/* Input flags.  */
572  int ai_family;		/* Protocol family for socket.  */
573  int ai_socktype;		/* Socket type.  */
574  int ai_protocol;		/* Protocol for socket.  */
575  socklen_t ai_addrlen;		/* Length of socket address.  */
576  struct sockaddr *ai_addr;	/* Socket address for socket.  */
577  char *ai_canonname;		/* Canonical name for service location.  */
578  struct addrinfo *ai_next;	/* Pointer to next in list.  */
579};
580
581# ifdef __USE_GNU
582/* Structure used as control block for asynchronous lookup.  */
583struct gaicb
584{
585  const char *ar_name;		/* Name to look up.  */
586  const char *ar_service;	/* Service name.  */
587  const struct addrinfo *ar_request; /* Additional request specification.  */
588  struct addrinfo *ar_result;	/* Pointer to result.  */
589  /* The following are internal elements.  */
590  int __return;
591  int __unused[5];
592};
593
594/* Lookup mode.  */
595#  define GAI_WAIT	0
596#  define GAI_NOWAIT	1
597# endif
598
599/* Possible values for `ai_flags' field in `addrinfo' structure.  */
600# define AI_PASSIVE	0x0001	/* Socket address is intended for `bind'.  */
601# define AI_CANONNAME	0x0002	/* Request for canonical name.  */
602# define AI_NUMERICHOST	0x0004	/* Don't use name resolution.  */
603# define AI_V4MAPPED	0x0008	/* IPv4 mapped addresses are acceptable.  */
604# define AI_ALL		0x0010	/* Return IPv4 mapped and IPv6 addresses.  */
605# define AI_ADDRCONFIG	0x0020	/* Use configuration of this host to choose
606				   returned address type..  */
607# ifdef __USE_GNU
608#  define AI_IDN	0x0040	/* IDN encode input (assuming it is encoded
609				   in the current locale's character set)
610				   before looking it up. */
611#  define AI_CANONIDN	0x0080	/* Translate canonical name from IDN format. */
612#  define AI_IDN_ALLOW_UNASSIGNED 0x0100 /* Don't reject unassigned Unicode
613					    code points.  */
614#  define AI_IDN_USE_STD3_ASCII_RULES 0x0200 /* Validate strings according to
615						STD3 rules.  */
616# endif
617# define AI_NUMERICSERV	0x0400	/* Don't use name resolution.  */
618
619/* Error values for `getaddrinfo' function.  */
620# define EAI_BADFLAGS	  -1	/* Invalid value for `ai_flags' field.  */
621# define EAI_NONAME	  -2	/* NAME or SERVICE is unknown.  */
622# define EAI_AGAIN	  -3	/* Temporary failure in name resolution.  */
623# define EAI_FAIL	  -4	/* Non-recoverable failure in name res.  */
624# define EAI_FAMILY	  -6	/* `ai_family' not supported.  */
625# define EAI_SOCKTYPE	  -7	/* `ai_socktype' not supported.  */
626# define EAI_SERVICE	  -8	/* SERVICE not supported for `ai_socktype'.  */
627# define EAI_MEMORY	  -10	/* Memory allocation failure.  */
628# define EAI_SYSTEM	  -11	/* System error returned in `errno'.  */
629# define EAI_OVERFLOW	  -12	/* Argument buffer overflow.  */
630# ifdef __USE_GNU
631#  define EAI_NODATA	  -5	/* No address associated with NAME.  */
632#  define EAI_ADDRFAMILY  -9	/* Address family for NAME not supported.  */
633#  define EAI_INPROGRESS  -100	/* Processing request in progress.  */
634#  define EAI_CANCELED	  -101	/* Request canceled.  */
635#  define EAI_NOTCANCELED -102	/* Request not canceled.  */
636#  define EAI_ALLDONE	  -103	/* All requests done.  */
637#  define EAI_INTR	  -104	/* Interrupted by a signal.  */
638#  define EAI_IDN_ENCODE  -105	/* IDN encoding failed.  */
639# endif
640
641# ifdef __USE_MISC
642#  define NI_MAXHOST      1025
643#  define NI_MAXSERV      32
644# endif
645
646# define NI_NUMERICHOST	1	/* Don't try to look up hostname.  */
647# define NI_NUMERICSERV 2	/* Don't convert port number to name.  */
648# define NI_NOFQDN	4	/* Only return nodename portion.  */
649# define NI_NAMEREQD	8	/* Don't return numeric addresses.  */
650# define NI_DGRAM	16	/* Look up UDP service rather than TCP.  */
651# ifdef __USE_GNU
652#  define NI_IDN	32	/* Convert name from IDN format.  */
653#  define NI_IDN_ALLOW_UNASSIGNED 64 /* Don't reject unassigned Unicode
654					code points.  */
655#  define NI_IDN_USE_STD3_ASCII_RULES 128 /* Validate strings according to
656					     STD3 rules.  */
657# endif
658
659/* Translate name of a service location and/or a service name to set of
660   socket addresses.
661
662   This function is a possible cancellation point and therefore not
663   marked with __THROW.  */
664extern int getaddrinfo (__const char *__restrict __name,
665			__const char *__restrict __service,
666			__const struct addrinfo *__restrict __req,
667			struct addrinfo **__restrict __pai);
668
669/* Free `addrinfo' structure AI including associated storage.  */
670extern void freeaddrinfo (struct addrinfo *__ai) __THROW;
671
672/* Convert error return from getaddrinfo() to a string.  */
673extern __const char *gai_strerror (int __ecode) __THROW;
674
675/* Translate a socket address to a location and service name.
676
677   This function is a possible cancellation point and therefore not
678   marked with __THROW.  */
679extern int getnameinfo (__const struct sockaddr *__restrict __sa,
680			socklen_t __salen, char *__restrict __host,
681			socklen_t __hostlen, char *__restrict __serv,
682			socklen_t __servlen, int __flags);
683#endif	/* POSIX */
684
685#ifdef __USE_GNU
686/* Enqueue ENT requests from the LIST.  If MODE is GAI_WAIT wait until all
687   requests are handled.  If WAIT is GAI_NOWAIT return immediately after
688   queueing the requests and signal completion according to SIG.
689
690   This function is not part of POSIX and therefore no official
691   cancellation point.  But due to similarity with an POSIX interface
692   or due to the implementation it is a cancellation point and
693   therefore not marked with __THROW.  */
694extern int getaddrinfo_a (int __mode, struct gaicb *__list[__restrict_arr],
695			  int __ent, struct sigevent *__restrict __sig);
696
697/* Suspend execution of the thread until at least one of the ENT requests
698   in LIST is handled.  If TIMEOUT is not a null pointer it specifies the
699   longest time the function keeps waiting before returning with an error.
700
701   This function is not part of POSIX and therefore no official
702   cancellation point.  But due to similarity with an POSIX interface
703   or due to the implementation it is a cancellation point and
704   therefore not marked with __THROW.  */
705extern int gai_suspend (__const struct gaicb *__const __list[], int __ent,
706			__const struct timespec *__timeout);
707
708/* Get the error status of the request REQ.  */
709extern int gai_error (struct gaicb *__req) __THROW;
710
711/* Cancel the requests associated with GAICBP.  */
712extern int gai_cancel (struct gaicb *__gaicbp) __THROW;
713#endif	/* GNU */
714
715__END_DECLS
716
717#endif	/* netdb.h */
718