- Notifications
You must be signed in to change notification settings - Fork 31.7k
/
Copy pathaddrinfo.h
176 lines (160 loc) · 6.13 KB
/
addrinfo.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/*
* Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the project nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndefHAVE_GETADDRINFO
/*
* Error return codes from getaddrinfo()
*/
#ifdefEAI_ADDRFAMILY
/* If this is defined, there is a conflicting implementation
in the C library, which can't be used for some reason.
Make sure it won't interfere with this emulation. */
#undef EAI_ADDRFAMILY
#undef EAI_AGAIN
#undef EAI_BADFLAGS
#undef EAI_FAIL
#undef EAI_FAMILY
#undef EAI_MEMORY
#undef EAI_NODATA
#undef EAI_NONAME
#undef EAI_SERVICE
#undef EAI_SOCKTYPE
#undef EAI_SYSTEM
#undef EAI_BADHINTS
#undef EAI_PROTOCOL
#undef EAI_MAX
#undef getaddrinfo
#definegetaddrinfo fake_getaddrinfo
#endif/* EAI_ADDRFAMILY */
#defineEAI_ADDRFAMILY 1 /* address family for hostname not supported */
#defineEAI_AGAIN 2 /* temporary failure in name resolution */
#defineEAI_BADFLAGS 3 /* invalid value for ai_flags */
#defineEAI_FAIL 4 /* non-recoverable failure in name resolution */
#defineEAI_FAMILY 5 /* ai_family not supported */
#defineEAI_MEMORY 6 /* memory allocation failure */
#defineEAI_NODATA 7 /* no address associated with hostname */
#defineEAI_NONAME 8 /* hostname nor servname provided, or not known */
#defineEAI_SERVICE 9 /* servname not supported for ai_socktype */
#defineEAI_SOCKTYPE 10 /* ai_socktype not supported */
#defineEAI_SYSTEM 11 /* system error returned in errno */
#defineEAI_BADHINTS 12
#defineEAI_PROTOCOL 13
#defineEAI_MAX 14
/*
* Flag values for getaddrinfo()
*/
#ifdefAI_PASSIVE
#undef AI_PASSIVE
#undef AI_CANONNAME
#undef AI_NUMERICHOST
#undef AI_MASK
#undef AI_ALL
#undef AI_V4MAPPED_CFG
#undef AI_ADDRCONFIG
#undef AI_V4MAPPED
#undef AI_DEFAULT
#endif/* AI_PASSIVE */
#defineAI_PASSIVE 0x00000001 /* get address to use bind() */
#defineAI_CANONNAME 0x00000002 /* fill ai_canonname */
#defineAI_NUMERICHOST 0x00000004 /* prevent name resolution */
/* valid flags for addrinfo */
#defineAI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
#defineAI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
#defineAI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */
#defineAI_ADDRCONFIG 0x00000400 /* only if any address is assigned */
#defineAI_V4MAPPED 0x00000800 /* accept IPv4-mapped IPv6 address */
/* special recommended flags for getipnodebyname */
#defineAI_DEFAULT (AI_V4MAPPED_CFG | AI_ADDRCONFIG)
#endif/* !HAVE_GETADDRINFO */
#ifndefHAVE_GETNAMEINFO
/*
* Constants for getnameinfo()
*/
#ifndefNI_MAXHOST
#defineNI_MAXHOST 1025
#defineNI_MAXSERV 32
#endif/* !NI_MAXHOST */
/*
* Flag values for getnameinfo()
*/
#ifndefNI_NOFQDN
#defineNI_NOFQDN 0x00000001
#defineNI_NUMERICHOST 0x00000002
#defineNI_NAMEREQD 0x00000004
#defineNI_NUMERICSERV 0x00000008
#defineNI_DGRAM 0x00000010
#endif/* !NI_NOFQDN */
#endif/* !HAVE_GETNAMEINFO */
#ifndefHAVE_ADDRINFO
structaddrinfo {
intai_flags; /* AI_PASSIVE, AI_CANONNAME */
intai_family; /* PF_xxx */
intai_socktype; /* SOCK_xxx */
intai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
size_tai_addrlen; /* length of ai_addr */
char*ai_canonname; /* canonical name for hostname */
structsockaddr*ai_addr; /* binary address */
structaddrinfo*ai_next; /* next structure in linked list */
};
#endif/* !HAVE_ADDRINFO */
#ifndefHAVE_SOCKADDR_STORAGE
/*
* RFC 2553: protocol-independent placeholder for socket addresses
*/
#define_SS_MAXSIZE 128
#ifdefHAVE_LONG_LONG
#define_SS_ALIGNSIZE (sizeof(PY_LONG_LONG))
#else
#define_SS_ALIGNSIZE (sizeof(double))
#endif/* HAVE_LONG_LONG */
#define_SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(u_char) * 2)
#define_SS_PAD2SIZE (_SS_MAXSIZE - sizeof(u_char) * 2 - \
_SS_PAD1SIZE - _SS_ALIGNSIZE)
structsockaddr_storage {
#ifdefHAVE_SOCKADDR_SA_LEN
unsigned charss_len; /* address length */
unsigned charss_family; /* address family */
#else
unsigned shortss_family; /* address family */
#endif/* HAVE_SOCKADDR_SA_LEN */
char__ss_pad1[_SS_PAD1SIZE];
#ifdefHAVE_LONG_LONG
PY_LONG_LONG__ss_align; /* force desired structure storage alignment */
#else
double__ss_align; /* force desired structure storage alignment */
#endif/* HAVE_LONG_LONG */
char__ss_pad2[_SS_PAD2SIZE];
};
#endif/* !HAVE_SOCKADDR_STORAGE */
#ifdef__cplusplus
extern"C" {
#endif
externvoidfreehostentPy_PROTO((structhostent*));
#ifdef__cplusplus
}
#endif