86 #include <netinet/in.h>
87 #include <arpa/nameser.h>
88 #ifdef RESOLVE_H_NEEDS_STDIO_H
116 #define INET_PROTO_MASK_IPV4 (1<<0)
117 #define INET_PROTO_MASK_IPV6 (1<<1)
132 static unsigned char *make_uchar_vector(
int len,...)
134 const char *myname =
"make_uchar_vector";
141 msg_panic(
"%s: bad vector length: %d", myname, len);
142 vp = (
unsigned char *)
mymalloc(
sizeof(*vp) * len);
143 for (count = 0; count < len; count++)
144 vp[count] = va_arg(ap,
unsigned);
151 static unsigned *make_unsigned_vector(
int len,...)
153 const char *myname =
"make_unsigned_vector";
160 msg_panic(
"%s: bad vector length: %d", myname, len);
161 vp = (
unsigned *)
mymalloc(
sizeof(*vp) * len);
162 for (count = 0; count < len; count++)
163 vp[count] = va_arg(ap,
unsigned);
182 const char *myname =
"inet_proto";
192 inet_proto_mask =
name_mask(context, proto_table, protocols);
195 if ((sock = socket(PF_INET6, SOCK_STREAM, 0)) >= 0) {
197 }
else if (errno == EAFNOSUPPORT || errno == EPROTONOSUPPORT) {
198 msg_warn(
"%s: disabling IPv6 name/address support: %m", context);
199 inet_proto_mask &= ~INET_PROTO_MASK_IPV6;
206 if ((sock = socket(PF_INET, SOCK_STREAM, 0)) >= 0) {
208 }
else if (errno == EAFNOSUPPORT || errno == EPROTONOSUPPORT) {
209 msg_warn(
"%s: disabling IPv4 name/address support: %m", context);
210 inet_proto_mask &= ~INET_PROTO_MASK_IPV4;
224 switch (inet_proto_mask) {
226 case INET_PROTO_MASK_IPV6:
233 case (INET_PROTO_MASK_IPV6 | INET_PROTO_MASK_IPV4):
236 pf->
ai_family_list = make_unsigned_vector(3, PF_INET, PF_INET6, 0);
241 case INET_PROTO_MASK_IPV4:
256 msg_panic(
"%s: bad inet_proto_mask 0x%x", myname, inet_proto_mask);
258 if (inet_proto_table)
259 inet_proto_free(inet_proto_table);
260 return (inet_proto_table = pf);
269 static char *print_unsigned_vector(
VSTRING *buf,
unsigned *vector)
274 for (p = vector; *p; p++) {
283 static char *print_uchar_vector(
VSTRING *buf,
unsigned char *vector)
288 for (p = vector; *p; p++) {
297 int main(
int argc,
char **argv)
299 const char *myname = argv[0];
304 msg_fatal(
"usage: %s protocol(s)...", myname);
NORETURN msg_panic(const char *fmt,...)
int main(int argc, char **argv)
INET_PROTO_INFO * inet_proto_init(const char *context, const char *protocols)
#define INET_PROTO_NAME_ALL
#define VSTRING_TERMINATE(vp)
unsigned int * ai_family_list
#define INET_PROTO_MASK_IPV4
#define VSTRING_ADDCH(vp, ch)
VSTRING * vstring_sprintf_append(VSTRING *vp, const char *format,...)
INET_PROTO_INFO * inet_proto_table
#define VSTRING_RESET(vp)
void msg_warn(const char *fmt,...)
VSTRING * vstring_alloc(ssize_t len)
unsigned char * sa_family_list
#define name_mask(tag, table, str)
#define INET_PROTO_NAME_IPV6
NORETURN msg_fatal(const char *fmt,...)
VSTRING * vstring_free(VSTRING *vp)
#define INET_PROTO_MASK_IPV6
#define INET_PROTO_NAME_IPV4
unsigned int * dns_atype_list
void * mymalloc(ssize_t len)
void msg_info(const char *fmt,...)