X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Ftransmit.c;h=be72cf237e1f23d6e4a5ef00e286e8bdc2e9605e;hb=9d138734ee5af9b79ea81529f54971dbc60c968c;hp=ecea891ec5c40e6b5fb436bdf8946090e23357c2;hpb=f930c455a13d7d30ee94bdbfc460bc6227cda111;p=adns.git diff --git a/src/transmit.c b/src/transmit.c index ecea891..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++; /* bodge */ 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++; /* bodge */ 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;