Browse Source

fix selection algorithm for default windows DNS

Roy Ivy III 4 years ago
parent
commit
3b5b09d6ee
1 changed files with 6 additions and 4 deletions
  1. 6 4
      src/resolve.rs

+ 6 - 4
src/resolve.rs

@@ -76,14 +76,16 @@ fn system_nameservers() -> io::Result<Option<Nameserver>> {
         }
     };
 
-    for dns_server in adapters
-        .iter()
-        .flat_map(|adapter| adapter.dns_servers().iter()) {
+    for adapter in adapters.iter().filter(|a| {
+        a.oper_status() == ipconfig::OperStatus::IfOperStatusUp && !a.gateways().is_empty()
+    }) {
+        for dns_server in adapter.dns_servers().iter() {
             // TODO: This will need to be changed for IPv6 support.
             if dns_server.is_ipv4() {
                 debug!("Found first nameserver {:?}", dns_server);
-                return Ok(Some(dns_server.to_string()))
+                return Ok(Some(dns_server.to_string()));
             }
+        }
     }
 
     warn!("No nameservers available");