59 const char *myname =
"dns_rr_eq_sa";
61 if (sa->sa_family == AF_INET) {
62 return (rr->
type == T_A
65 }
else if (sa->sa_family == AF_INET6) {
66 return (rr->
type == T_AAAA
67 && memcmp((
void *) &SOCK_ADDR_IN6_ADDR(sa),
71 msg_panic(
"%s: unsupported socket address family type: %d",
72 myname, sa->sa_family);
86 static const char *myname;
90 msg_fatal(
"usage: %s hostname address", myname);
93 static int compare_family(
const void *a,
const void *b)
95 struct addrinfo *resa = *(
struct addrinfo **) a;
96 struct addrinfo *resb = *(
struct addrinfo **) b;
98 return (resa->ai_family - resb->ai_family);
101 int main(
int argc,
char **argv)
105 struct addrinfo *res0;
106 struct addrinfo *res1;
107 struct addrinfo *res;
108 struct addrinfo **resv;
125 if ((rr =
dns_sa_to_rr(argv[1], 0, res1->ai_addr)) == 0)
131 for (len = 0, res = res0; res != 0; res = res->ai_next)
133 resv = (
struct addrinfo **)
mymalloc(len *
sizeof(*resv));
134 for (len = 0, res = res0; res != 0; res = res->ai_next)
136 qsort((
void *) resv, len,
sizeof(*resv), compare_family);
137 for (n = 0; n < len; n++) {
void freeaddrinfo(struct addrinfo *ai)
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 hostname_to_sockaddr(host, serv, sock, res)
#define SOCKADDR_TO_HOSTADDR(sa, salen, host, port, sock)
#define INET_PROTO_NAME_ALL
int hostaddr_to_sockaddr(const char *hostaddr, const char *service, int socktype, struct addrinfo **res)
int dns_rr_eq_sa(DNS_RR *rr, struct sockaddr *sa)
char buf[MAI_HOSTADDR_STRSIZE]
VSTREAM * vstream_printf(const char *fmt,...)
DNS_RR * dns_sa_to_rr(const char *, unsigned, struct sockaddr *)
NORETURN msg_fatal(const char *fmt,...)
int vstream_fflush(VSTREAM *stream)
#define SOCK_ADDR_IN_ADDR(sa)
void dns_rr_free(DNS_RR *)
#define DNS_RR_EQ_SA(rr, sa)
void * mymalloc(ssize_t len)