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