blob: 967ca211f9dabcf5ae2929d1a999bd9b0a2b15b1 [file] [log] [blame]
Rich Felker0b44a032011-02-12 00:22:29 -05001#ifndef _NETDB_H
2#define _NETDB_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
Rich Felkerc1a96582012-09-07 23:13:55 -04008#include <features.h>
Rich Felker9448b052013-07-22 11:22:36 -04009#include <netinet/in.h>
Rich Felker400c5e52012-09-06 22:44:55 -040010
Rich Felker419ae6d2012-05-22 21:52:08 -040011#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
Rich Felker0b44a032011-02-12 00:22:29 -050012#define __NEED_size_t
Rich Felker0b44a032011-02-12 00:22:29 -050013#include <bits/alltypes.h>
Rich Felker9448b052013-07-22 11:22:36 -040014#endif
Rich Felker0b44a032011-02-12 00:22:29 -050015
Rich Felkerbefa5862016-07-03 14:40:11 -040016struct addrinfo {
Rich Felker0b44a032011-02-12 00:22:29 -050017 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 IPPORT_RESERVED 1024
28
29#define AI_PASSIVE 0x01
30#define AI_CANONNAME 0x02
31#define AI_NUMERICHOST 0x04
32#define AI_V4MAPPED 0x08
33#define AI_ALL 0x10
34#define AI_ADDRCONFIG 0x20
35#define AI_NUMERICSERV 0x400
36
37
38#define NI_NUMERICHOST 0x01
39#define NI_NUMERICSERV 0x02
40#define NI_NOFQDN 0x04
41#define NI_NAMEREQD 0x08
42#define NI_DGRAM 0x10
Rich Felkerbdad2fe2014-06-04 02:24:38 -040043#define NI_NUMERICSCOPE 0x100
Rich Felker0b44a032011-02-12 00:22:29 -050044
Rich Felker0b44a032011-02-12 00:22:29 -050045#define EAI_BADFLAGS -1
46#define EAI_NONAME -2
47#define EAI_AGAIN -3
48#define EAI_FAIL -4
49#define EAI_FAMILY -6
50#define EAI_SOCKTYPE -7
51#define EAI_SERVICE -8
52#define EAI_MEMORY -10
53#define EAI_SYSTEM -11
54#define EAI_OVERFLOW -12
55
Rich Felker400c5e52012-09-06 22:44:55 -040056int getaddrinfo (const char *__restrict, const char *__restrict, const struct addrinfo *__restrict, struct addrinfo **__restrict);
Rich Felker0b44a032011-02-12 00:22:29 -050057void freeaddrinfo (struct addrinfo *);
Rich Felker400c5e52012-09-06 22:44:55 -040058int getnameinfo (const struct sockaddr *__restrict, socklen_t, char *__restrict, socklen_t, char *__restrict, socklen_t, int);
Rich Felker0b44a032011-02-12 00:22:29 -050059const char *gai_strerror(int);
60
61
62/* Legacy functions follow (marked OBsolete in SUS) */
63
Rich Felkerbefa5862016-07-03 14:40:11 -040064struct netent {
Rich Felker0b44a032011-02-12 00:22:29 -050065 char *n_name;
66 char **n_aliases;
67 int n_addrtype;
68 uint32_t n_net;
69};
70
Rich Felkerbefa5862016-07-03 14:40:11 -040071struct hostent {
Rich Felker0b44a032011-02-12 00:22:29 -050072 char *h_name;
73 char **h_aliases;
74 int h_addrtype;
75 int h_length;
76 char **h_addr_list;
77};
78#define h_addr h_addr_list[0]
79
Rich Felkerbefa5862016-07-03 14:40:11 -040080struct servent {
Rich Felker0b44a032011-02-12 00:22:29 -050081 char *s_name;
82 char **s_aliases;
83 int s_port;
84 char *s_proto;
85};
86
Rich Felkerbefa5862016-07-03 14:40:11 -040087struct protoent {
Rich Felker0b44a032011-02-12 00:22:29 -050088 char *p_name;
89 char **p_aliases;
90 int p_proto;
91};
92
Rich Felker0b44a032011-02-12 00:22:29 -050093void sethostent (int);
94void endhostent (void);
95struct hostent *gethostent (void);
Rich Felker0b44a032011-02-12 00:22:29 -050096
97void setnetent (int);
98void endnetent (void);
99struct netent *getnetent (void);
100struct netent *getnetbyaddr (uint32_t, int);
101struct netent *getnetbyname (const char *);
102
103void setservent (int);
104void endservent (void);
105struct servent *getservent (void);
106struct servent *getservbyname (const char *, const char *);
107struct servent *getservbyport (int, const char *);
108
109void setprotoent (int);
110void endprotoent (void);
111struct protoent *getprotoent (void);
112struct protoent *getprotobyname (const char *);
113struct protoent *getprotobynumber (int);
114
Rich Felker3f80afc2012-08-15 15:35:32 -0400115#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_POSIX_SOURCE) \
Rich Felkerb367ab12012-11-01 03:49:43 -0400116 || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE+0 < 200809L) \
117 || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700)
Rich Felker3777f5b2012-05-12 23:38:04 -0400118struct hostent *gethostbyname (const char *);
Rich Felker3777f5b2012-05-12 23:38:04 -0400119struct hostent *gethostbyaddr (const void *, socklen_t, int);
Rich Felkere68c51a2012-05-12 23:45:07 -0400120int *__h_errno_location(void);
121#define h_errno (*__h_errno_location())
Rich Felker3f80afc2012-08-15 15:35:32 -0400122#define HOST_NOT_FOUND 1
123#define TRY_AGAIN 2
124#define NO_RECOVERY 3
125#define NO_DATA 4
Timo Teräsa0351ee2014-01-13 13:36:03 +0200126#define NO_ADDRESS NO_DATA
Rich Felker3f80afc2012-08-15 15:35:32 -0400127#endif
128
129#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
Rich Felker18144af2013-12-20 11:56:16 -0500130void herror(const char *);
Rich Felker3f80afc2012-08-15 15:35:32 -0400131const char *hstrerror(int);
132int gethostbyname_r(const char *, struct hostent *, char *, size_t, struct hostent **, int *);
133int gethostbyname2_r(const char *, int, struct hostent *, char *, size_t, struct hostent **, int *);
134struct hostent *gethostbyname2(const char *, int);
135int gethostbyaddr_r(const void *, socklen_t, int, struct hostent *, char *, size_t, struct hostent **, int *);
136int getservbyport_r(int, const char *, struct servent *, char *, size_t, struct servent **);
137int getservbyname_r(const char *, const char *, struct servent *, char *, size_t, struct servent **);
Rich Felker7db6a872012-05-12 23:31:52 -0400138#define EAI_NODATA -5
139#define EAI_ADDRFAMILY -9
140#define EAI_INPROGRESS -100
141#define EAI_CANCELED -101
142#define EAI_NOTCANCELED -102
143#define EAI_ALLDONE -103
144#define EAI_INTR -104
145#define EAI_IDN_ENCODE -105
Rich Felker20052b92012-05-12 23:34:39 -0400146#define NI_MAXHOST 255
147#define NI_MAXSERV 32
Rich Felker0b44a032011-02-12 00:22:29 -0500148#endif
149
150
151#ifdef __cplusplus
152}
153#endif
154
155#endif