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