|  | #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 IPPORT_RESERVED 1024 | 
|  |  | 
|  | #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 |