X-Git-Url: https://git.distorted.org.uk/~mdw/adns/blobdiff_plain/c0ec02b59a25b13bb6a04abd518d0d2da0fefc88..refs/tags/wip.ipv6.2014-10-13.compare-old:/src/transmit.c diff --git a/src/transmit.c b/src/transmit.c index 67a55b4..be72cf2 100644 --- a/src/transmit.c +++ b/src/transmit.c @@ -120,7 +120,6 @@ adns_status adns__mkquery(adns_state ads, vbuf *vb, int *id_r, const char *p, *pe; adns_status st; - if (!((type^adns_r_addr) & adns_rrt_reprmask)) ads->nextid++; st= mkquery_header(ads,vb,id_r,ol+2); if (st) return st; MKQUERY_START(vb); @@ -156,7 +155,6 @@ adns_status adns__mkquery_frdgram(adns_state ads, vbuf *vb, int *id_r, int lablen, labstart; adns_status st; - if (!((type^adns_r_addr) & adns_rrt_reprmask)) ads->nextid++; st= mkquery_header(ads,vb,id_r,qd_dglen); if (st) return st; MKQUERY_START(vb); @@ -242,9 +240,17 @@ static void query_usetcp(adns_query qu, struct timeval now) { adns__tcp_tryconnect(qu->ads,now); } +struct udpsocket *adns__udpsocket_by_af(adns_state ads, int af) { + int i; + for (i=0; inudp; i++) + if (ads->udpsocket[i].af == af) return &ads->udpsocket[i]; + return 0; +} + void adns__query_send(adns_query qu, struct timeval now) { int serv, r; adns_state ads; + struct udpsocket *udp; adns_rr_addr *addr; assert(qu->state == query_tosend); @@ -261,8 +267,10 @@ void adns__query_send(adns_query qu, struct timeval now) { ads= qu->ads; serv= qu->udpnextserver; addr= &ads->servers[serv]; + udp= adns__udpsocket_by_af(ads, addr->addr.sa.sa_family); + assert(udp); - r= sendto(ads->udpsocket,qu->query_dgram,qu->query_dglen,0, + r= sendto(udp->fd,qu->query_dgram,qu->query_dglen,0, &addr->addr.sa,addr->len); if (r<0 && errno == EMSGSIZE) { qu->retries= 0;