|  | #ifndef	_NETDB_H | 
|  | #define	_NETDB_H | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | #include <features.h> | 
|  | #include <netinet/in.h> | 
|  |  | 
|  | #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | 
|  | #define __NEED_size_t | 
|  | #include <bits/alltypes.h> | 
|  | #endif | 
|  |  | 
|  | struct addrinfo { | 
|  | int ai_flags; | 
|  | int ai_family; | 
|  | int ai_socktype; | 
|  | int ai_protocol; | 
|  | socklen_t ai_addrlen; | 
|  | struct sockaddr *ai_addr; | 
|  | char *ai_canonname; | 
|  | struct addrinfo *ai_next; | 
|  | }; | 
|  |  | 
|  | #define AI_PASSIVE      0x01 | 
|  | #define AI_CANONNAME    0x02 | 
|  | #define AI_NUMERICHOST  0x04 | 
|  | #define AI_V4MAPPED     0x08 | 
|  | #define AI_ALL          0x10 | 
|  | #define AI_ADDRCONFIG   0x20 | 
|  | #define AI_NUMERICSERV  0x400 | 
|  |  | 
|  |  | 
|  | #define NI_NUMERICHOST  0x01 | 
|  | #define NI_NUMERICSERV  0x02 | 
|  | #define NI_NOFQDN       0x04 | 
|  | #define NI_NAMEREQD     0x08 | 
|  | #define NI_DGRAM        0x10 | 
|  | #define NI_NUMERICSCOPE 0x100 | 
|  |  | 
|  | #define EAI_BADFLAGS   -1 | 
|  | #define EAI_NONAME     -2 | 
|  | #define EAI_AGAIN      -3 | 
|  | #define EAI_FAIL       -4 | 
|  | #define EAI_FAMILY     -6 | 
|  | #define EAI_SOCKTYPE   -7 | 
|  | #define EAI_SERVICE    -8 | 
|  | #define EAI_MEMORY     -10 | 
|  | #define EAI_SYSTEM     -11 | 
|  | #define EAI_OVERFLOW   -12 | 
|  |  | 
|  | int getaddrinfo (const char *__restrict, const char *__restrict, const struct addrinfo *__restrict, struct addrinfo **__restrict); | 
|  | void freeaddrinfo (struct addrinfo *); | 
|  | int getnameinfo (const struct sockaddr *__restrict, socklen_t, char *__restrict, socklen_t, char *__restrict, socklen_t, int); | 
|  | const char *gai_strerror(int); | 
|  |  | 
|  |  | 
|  | /* Legacy functions follow (marked OBsolete in SUS) */ | 
|  |  | 
|  | struct netent { | 
|  | char *n_name; | 
|  | char **n_aliases; | 
|  | int n_addrtype; | 
|  | uint32_t n_net; | 
|  | }; | 
|  |  | 
|  | struct hostent { | 
|  | char *h_name; | 
|  | char **h_aliases; | 
|  | int h_addrtype; | 
|  | int h_length; | 
|  | char **h_addr_list; | 
|  | }; | 
|  | #define h_addr h_addr_list[0] | 
|  |  | 
|  | struct servent { | 
|  | char *s_name; | 
|  | char **s_aliases; | 
|  | int s_port; | 
|  | char *s_proto; | 
|  | }; | 
|  |  | 
|  | struct protoent { | 
|  | char *p_name; | 
|  | char **p_aliases; | 
|  | int p_proto; | 
|  | }; | 
|  |  | 
|  | void sethostent (int); | 
|  | void endhostent (void); | 
|  | struct hostent *gethostent (void); | 
|  |  | 
|  | void setnetent (int); | 
|  | void endnetent (void); | 
|  | struct netent *getnetent (void); | 
|  | struct netent *getnetbyaddr (uint32_t, int); | 
|  | struct netent *getnetbyname (const char *); | 
|  |  | 
|  | void setservent (int); | 
|  | void endservent (void); | 
|  | struct servent *getservent (void); | 
|  | struct servent *getservbyname (const char *, const char *); | 
|  | struct servent *getservbyport (int, const char *); | 
|  |  | 
|  | void setprotoent (int); | 
|  | void endprotoent (void); | 
|  | struct protoent *getprotoent (void); | 
|  | struct protoent *getprotobyname (const char *); | 
|  | struct protoent *getprotobynumber (int); | 
|  |  | 
|  | #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_POSIX_SOURCE) \ | 
|  | || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE+0 < 200809L) \ | 
|  | || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700) | 
|  | struct hostent *gethostbyname (const char *); | 
|  | struct hostent *gethostbyaddr (const void *, socklen_t, int); | 
|  | int *__h_errno_location(void); | 
|  | #define h_errno (*__h_errno_location()) | 
|  | #define HOST_NOT_FOUND 1 | 
|  | #define TRY_AGAIN      2 | 
|  | #define NO_RECOVERY    3 | 
|  | #define NO_DATA        4 | 
|  | #define NO_ADDRESS     NO_DATA | 
|  | #endif | 
|  |  | 
|  | #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) | 
|  | void herror(const char *); | 
|  | const char *hstrerror(int); | 
|  | int gethostbyname_r(const char *, struct hostent *, char *, size_t, struct hostent **, int *); | 
|  | int gethostbyname2_r(const char *, int, struct hostent *, char *, size_t, struct hostent **, int *); | 
|  | struct hostent *gethostbyname2(const char *, int); | 
|  | int gethostbyaddr_r(const void *, socklen_t, int, struct hostent *, char *, size_t, struct hostent **, int *); | 
|  | int getservbyport_r(int, const char *, struct servent *, char *, size_t, struct servent **); | 
|  | int getservbyname_r(const char *, const char *, struct servent *, char *, size_t, struct servent **); | 
|  | #define EAI_NODATA     -5 | 
|  | #define EAI_ADDRFAMILY -9 | 
|  | #define EAI_INPROGRESS -100 | 
|  | #define EAI_CANCELED   -101 | 
|  | #define EAI_NOTCANCELED -102 | 
|  | #define EAI_ALLDONE    -103 | 
|  | #define EAI_INTR       -104 | 
|  | #define EAI_IDN_ENCODE -105 | 
|  | #define NI_MAXHOST 255 | 
|  | #define NI_MAXSERV 32 | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #endif |