1 #ifndef _MYADDRINFO_H_INCLUDED_
2 #define _MYADDRINFO_H_INCLUDED_
17 #include <sys/types.h>
18 #include <sys/socket.h>
19 #include <netinet/in.h>
28 #ifdef EMULATE_IPV4_ADDRINFO
36 #define freeaddrinfo mai_freeaddrinfo
38 #define gai_strerror mai_strerror
40 #define addrinfo mai_addrinfo
41 #undef sockaddr_storage
42 #define sockaddr_storage mai_sockaddr_storage
54 struct sockaddr *ai_addr;
55 struct addrinfo *ai_next;
61 struct sockaddr_storage {
62 struct sockaddr_in dummy;
71 #define EAI_ADDRFAMILY 1
75 #define EAI_BADFLAGS 3
89 #define EAI_SOCKTYPE 10
93 #define EAI_BADHINTS 12
95 #define EAI_PROTOCOL 13
97 #define EAI_RESNULL 14
112 # define MAI_HOSTADDR_STRSIZE INET6_ADDRSTRLEN
114 # ifndef INET_ADDRSTRLEN
115 # define INET_ADDRSTRLEN 16
117 # define MAI_HOSTADDR_STRSIZE INET_ADDRSTRLEN
120 #define MAI_HOSTNAME_STRSIZE 1025
121 #define MAI_SERVNAME_STRSIZE 32
122 #define MAI_SERVPORT_STRSIZE sizeof("65535")
124 #define MAI_V4ADDR_BITS 32
125 #define MAI_V6ADDR_BITS 128
126 #define MAI_V4ADDR_BYTES ((MAI_V4ADDR_BITS + (CHAR_BIT - 1))/CHAR_BIT)
127 #define MAI_V6ADDR_BYTES ((MAI_V6ADDR_BITS + (CHAR_BIT - 1))/CHAR_BIT)
158 int,
const char *,
int,
struct addrinfo **);
160 const char *,
int,
struct addrinfo **);
167 #define MAI_CTL_END 0
169 #define MAI_STRERROR(e) ((e) == EAI_SYSTEM ? strerror(errno) : gai_strerror(e))
171 #define hostname_to_sockaddr(host, serv, sock, res) \
172 hostname_to_sockaddr_pf((host), PF_UNSPEC, (serv), (sock), (res))
178 #define HOSTNAME_TO_SOCKADDR_PF(host, pf, serv, sock, res) \
181 _aierr = hostname_to_sockaddr_pf((host), (pf), (serv), (sock), (res)); \
183 msg_fatal("hostname_to_sockaddr_pf: %s", MAI_STRERROR(_aierr)); \
186 #define HOSTNAME_TO_SOCKADDR(host, serv, sock, res) \
187 HOSTNAME_TO_SOCKADDR_PF((host), PF_UNSPEC, (serv), (sock), (res))
189 #define HOSTADDR_TO_SOCKADDR(host, serv, sock, res) \
192 _aierr = hostaddr_to_sockaddr((host), (serv), (sock), (res)); \
194 msg_fatal("hostaddr_to_sockaddr: %s", MAI_STRERROR(_aierr)); \
197 #define SOCKADDR_TO_HOSTADDR(sa, salen, host, port, sock) \
200 _aierr = sockaddr_to_hostaddr((sa), (salen), (host), (port), (sock)); \
202 msg_fatal("sockaddr_to_hostaddr: %s", MAI_STRERROR(_aierr)); \
205 #define SOCKADDR_TO_HOSTNAME(sa, salen, host, service, sock) \
208 _aierr = sockaddr_to_hostname((sa), (salen), (host), (service), (sock)); \
210 msg_fatal("sockaddr_to_hostname: %s", MAI_STRERROR(_aierr)); \
void freeaddrinfo(struct addrinfo *ai)
int WARN_UNUSED_RESULT sockaddr_to_hostname(const struct sockaddr *, SOCKADDR_SIZE, MAI_HOSTNAME_STR *, MAI_SERVNAME_STR *, int)
void myaddrinfo_control(int,...)
int WARN_UNUSED_RESULT sockaddr_to_hostaddr(const struct sockaddr *, SOCKADDR_SIZE, MAI_HOSTADDR_STR *, MAI_SERVPORT_STR *, int)
#define MAI_HOSTNAME_STRSIZE
#define WARN_UNUSED_RESULT
int WARN_UNUSED_RESULT hostaddr_to_sockaddr(const char *, const char *, int, struct addrinfo **)
int WARN_UNUSED_RESULT hostname_to_sockaddr_pf(const char *, int, const char *, int, struct addrinfo **)
#define MAI_SERVNAME_STRSIZE
#define MAI_SERVPORT_STRSIZE
char * gai_strerror(int ecode)
#define MAI_HOSTADDR_STRSIZE