1 #ifndef _NETDB_H 2 #define _NETDB_H 3 4 #ifdef __cplusplus 5 extern "C" { 6 #endif 7 8 #include <features.h> 9 #include <netinet/in.h> 10 11 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 12 #define __NEED_size_t 13 #include <bits/alltypes.h> 14 #endif 15 16 struct addrinfo { 17 int ai_flags; 18 int ai_family; 19 int ai_socktype; 20 int ai_protocol; 21 socklen_t ai_addrlen; 22 struct sockaddr *ai_addr; 23 char *ai_canonname; 24 struct addrinfo *ai_next; 25 }; 26 27 #define AI_PASSIVE 0x01 28 #define AI_CANONNAME 0x02 29 #define AI_NUMERICHOST 0x04 30 #define AI_V4MAPPED 0x08 31 #define AI_ALL 0x10 32 #define AI_ADDRCONFIG 0x20 33 #define AI_NUMERICSERV 0x400 34 35 36 #define NI_NUMERICHOST 0x01 37 #define NI_NUMERICSERV 0x02 38 #define NI_NOFQDN 0x04 39 #define NI_NAMEREQD 0x08 40 #define NI_DGRAM 0x10 41 #define NI_NUMERICSCOPE 0x100 42 43 #define EAI_BADFLAGS -1 44 #define EAI_NONAME -2 45 #define EAI_AGAIN -3 46 #define EAI_FAIL -4 47 #define EAI_NODATA -5 48 #define EAI_FAMILY -6 49 #define EAI_SOCKTYPE -7 50 #define EAI_SERVICE -8 51 #define EAI_MEMORY -10 52 #define EAI_SYSTEM -11 53 #define EAI_OVERFLOW -12 54 55 int getaddrinfo (const char *__restrict, const char *__restrict, const struct addrinfo *__restrict, struct addrinfo **__restrict); 56 void freeaddrinfo (struct addrinfo *); 57 int getnameinfo (const struct sockaddr *__restrict, socklen_t, char *__restrict, socklen_t, char *__restrict, socklen_t, int); 58 const char *gai_strerror(int); 59 60 61 /* Legacy functions follow (marked OBsolete in SUS) */ 62 63 struct netent { 64 char *n_name; 65 char **n_aliases; 66 int n_addrtype; 67 uint32_t n_net; 68 }; 69 70 struct hostent { 71 char *h_name; 72 char **h_aliases; 73 int h_addrtype; 74 int h_length; 75 char **h_addr_list; 76 }; 77 #define h_addr h_addr_list[0] 78 79 struct servent { 80 char *s_name; 81 char **s_aliases; 82 int s_port; 83 char *s_proto; 84 }; 85 86 struct protoent { 87 char *p_name; 88 char **p_aliases; 89 int p_proto; 90 }; 91 92 void sethostent (int); 93 void endhostent (void); 94 struct hostent *gethostent (void); 95 96 void setnetent (int); 97 void endnetent (void); 98 struct netent *getnetent (void); 99 struct netent *getnetbyaddr (uint32_t, int); 100 struct netent *getnetbyname (const char *); 101 102 void setservent (int); 103 void endservent (void); 104 struct servent *getservent (void); 105 struct servent *getservbyname (const char *, const char *); 106 struct servent *getservbyport (int, const char *); 107 108 void setprotoent (int); 109 void endprotoent (void); 110 struct protoent *getprotoent (void); 111 struct protoent *getprotobyname (const char *); 112 struct protoent *getprotobynumber (int); 113 114 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_POSIX_SOURCE) \ 115 || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE+0 < 200809L) \ 116 || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700) 117 struct hostent *gethostbyname (const char *); 118 struct hostent *gethostbyaddr (const void *, socklen_t, int); 119 #ifdef __GNUC__ 120 __attribute__((const)) 121 #endif 122 int *__h_errno_location(void); 123 #define h_errno (*__h_errno_location()) 124 #define HOST_NOT_FOUND 1 125 #define TRY_AGAIN 2 126 #define NO_RECOVERY 3 127 #define NO_DATA 4 128 #define NO_ADDRESS NO_DATA 129 #endif 130 131 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 132 void herror(const char *); 133 const char *hstrerror(int); 134 int gethostbyname_r(const char *, struct hostent *, char *, size_t, struct hostent **, int *); 135 int gethostbyname2_r(const char *, int, struct hostent *, char *, size_t, struct hostent **, int *); 136 struct hostent *gethostbyname2(const char *, int); 137 int gethostbyaddr_r(const void *, socklen_t, int, struct hostent *, char *, size_t, struct hostent **, int *); 138 int getservbyport_r(int, const char *, struct servent *, char *, size_t, struct servent **); 139 int getservbyname_r(const char *, const char *, struct servent *, char *, size_t, struct servent **); 140 #define EAI_NODATA -5 141 #define EAI_ADDRFAMILY -9 142 #define EAI_INPROGRESS -100 143 #define EAI_CANCELED -101 144 #define EAI_NOTCANCELED -102 145 #define EAI_ALLDONE -103 146 #define EAI_INTR -104 147 #define EAI_IDN_ENCODE -105 148 #define NI_MAXHOST 255 149 #define NI_MAXSERV 32 150 #endif 151 152 153 #ifdef __cplusplus 154 } 155 #endif 156 157 #endif 158