@@ -257,17 +257,6 @@ impl<'a> Socket<'a> {
257
257
) -> Result < QueryHandle , StartQueryError > {
258
258
let handle = self . find_free_query ( ) . ok_or ( StartQueryError :: NoFreeSlot ) ?;
259
259
260
- if mdns {
261
- // as per RFC 6762 any DNS query ending in .local. MUST be sent as mdns
262
- // so we internally overwrite the servers for any of those queries
263
- self . update_servers ( & [
264
- #[ cfg( feature = "proto-ipv6" ) ]
265
- MDNS_IPV6_ADDR ,
266
- #[ cfg( feature = "proto-ipv4" ) ]
267
- MDNS_IPV4_ADDR ,
268
- ] ) ;
269
- }
270
-
271
260
self . queries [ handle. 0 ] = Some ( DnsQuery {
272
261
state : State :: Pending ( PendingQuery {
273
262
name : Vec :: from_slice ( raw_name) . map_err ( |_| StartQueryError :: NameTooLong ) ?,
@@ -514,6 +503,19 @@ impl<'a> Socket<'a> {
514
503
515
504
for q in self . queries . iter_mut ( ) . flatten ( ) {
516
505
if let State :: Pending ( pq) = & mut q. state {
506
+ // As per RFC 6762 any DNS query ending in .local. MUST be sent as mdns
507
+ // so we internally overwrite the servers for any of those queries
508
+ // in this function.
509
+ let servers = if pq. mdns {
510
+ & [
511
+ #[ cfg( feature = "proto-ipv6" ) ]
512
+ MDNS_IPV6_ADDR ,
513
+ #[ cfg( feature = "proto-ipv4" ) ]
514
+ MDNS_IPV4_ADDR ,
515
+ ]
516
+ } else {
517
+ self . servers . as_slice ( )
518
+ } ;
517
519
let timeout = if let Some ( timeout) = pq. timeout_at {
518
520
timeout
519
521
} else {
@@ -533,14 +535,14 @@ impl<'a> Socket<'a> {
533
535
pq. server_idx += 1 ;
534
536
}
535
537
// Check if we've run out of servers to try.
536
- if pq. server_idx >= self . servers . len ( ) {
538
+ if pq. server_idx >= servers. len ( ) {
537
539
net_trace ! ( "already tried all servers." ) ;
538
540
q. set_state ( State :: Failure ) ;
539
541
continue ;
540
542
}
541
543
542
544
// Check so the IP address is valid
543
- if self . servers [ pq. server_idx ] . is_unspecified ( ) {
545
+ if servers[ pq. server_idx ] . is_unspecified ( ) {
544
546
net_trace ! ( "invalid unspecified DNS server addr." ) ;
545
547
q. set_state ( State :: Failure ) ;
546
548
continue ;
@@ -572,7 +574,7 @@ impl<'a> Socket<'a> {
572
574
dst_port,
573
575
} ;
574
576
575
- let dst_addr = self . servers [ pq. server_idx ] ;
577
+ let dst_addr = servers[ pq. server_idx ] ;
576
578
let src_addr = cx. get_source_address ( dst_addr) . unwrap ( ) ; // TODO remove unwrap
577
579
let ip_repr = IpRepr :: new (
578
580
src_addr,
0 commit comments