1#ifndef _NETDB_H 2#define _NETDB_H 3 4#ifdef __cplusplus 5extern "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 16struct 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_FAMILY -6 48#define EAI_SOCKTYPE -7 49#define EAI_SERVICE -8 50#define EAI_MEMORY -10 51#define EAI_SYSTEM -11 52#define EAI_OVERFLOW -12 53 54int getaddrinfo (const char *__restrict, const char *__restrict, const struct addrinfo *__restrict, struct addrinfo **__restrict); 55void freeaddrinfo (struct addrinfo *); 56int getnameinfo (const struct sockaddr *__restrict, socklen_t, char *__restrict, socklen_t, char *__restrict, socklen_t, int); 57const char *gai_strerror(int); 58 59 60/* Legacy functions follow (marked OBsolete in SUS) */ 61 62struct netent { 63 char *n_name; 64 char **n_aliases; 65 int n_addrtype; 66 uint32_t n_net; 67}; 68 69struct hostent { 70 char *h_name; 71 char **h_aliases; 72 int h_addrtype; 73 int h_length; 74 char **h_addr_list; 75}; 76#define h_addr h_addr_list[0] 77 78struct servent { 79 char *s_name; 80 char **s_aliases; 81 int s_port; 82 char *s_proto; 83}; 84 85struct protoent { 86 char *p_name; 87 char **p_aliases; 88 int p_proto; 89}; 90 91void sethostent (int); 92void endhostent (void); 93struct hostent *gethostent (void); 94 95void setnetent (int); 96void endnetent (void); 97struct netent *getnetent (void); 98struct netent *getnetbyaddr (uint32_t, int); 99struct netent *getnetbyname (const char *); 100 101void setservent (int); 102void endservent (void); 103struct servent *getservent (void); 104struct servent *getservbyname (const char *, const char *); 105struct servent *getservbyport (int, const char *); 106 107void setprotoent (int); 108void endprotoent (void); 109struct protoent *getprotoent (void); 110struct protoent *getprotobyname (const char *); 111struct protoent *getprotobynumber (int); 112 113#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_POSIX_SOURCE) \ 114 || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE+0 < 200809L) \ 115 || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700) 116struct hostent *gethostbyname (const char *); 117struct hostent *gethostbyaddr (const void *, socklen_t, int); 118#ifdef __GNUC__ 119__attribute__((const)) 120#endif 121int *__h_errno_location(void); 122#define h_errno (*__h_errno_location()) 123#define HOST_NOT_FOUND 1 124#define TRY_AGAIN 2 125#define NO_RECOVERY 3 126#define NO_DATA 4 127#define NO_ADDRESS NO_DATA 128#endif 129 130#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 131void herror(const char *); 132const char *hstrerror(int); 133int gethostbyname_r(const char *, struct hostent *, char *, size_t, struct hostent **, int *); 134int gethostbyname2_r(const char *, int, struct hostent *, char *, size_t, struct hostent **, int *); 135struct hostent *gethostbyname2(const char *, int); 136int gethostbyaddr_r(const void *, socklen_t, int, struct hostent *, char *, size_t, struct hostent **, int *); 137int getservbyport_r(int, const char *, struct servent *, char *, size_t, struct servent **); 138int getservbyname_r(const char *, const char *, struct servent *, char *, size_t, struct servent **); 139#define EAI_NODATA -5 140#define EAI_ADDRFAMILY -9 141#define EAI_INPROGRESS -100 142#define EAI_CANCELED -101 143#define EAI_NOTCANCELED -102 144#define EAI_ALLDONE -103 145#define EAI_INTR -104 146#define EAI_IDN_ENCODE -105 147#define NI_MAXHOST 1025 148#define NI_MAXSERV 32 149#endif 150 151 152#ifdef __cplusplus 153} 154#endif 155 156#endif 157