diff options
| -rw-r--r-- | services/core/java/com/android/server/connectivity/NetworkMonitor.java | 3 | ||||
| -rw-r--r-- | services/net/java/android/net/dns/ResolvUtil.java | 15 |
2 files changed, 13 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java index c81624a87b4e..43ca3e669890 100644 --- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java +++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java @@ -822,8 +822,9 @@ public class NetworkMonitor extends StateMachine { private void resolveStrictModeHostname() { try { // Do a blocking DNS resolution using the network-assigned nameservers. + // Do not set AI_ADDRCONFIG in ai_flags so we get all address families in advance. final InetAddress[] ips = ResolvUtil.blockingResolveAllLocally( - mNetwork, mPrivateDnsProviderHostname); + mNetwork, mPrivateDnsProviderHostname, 0 /* aiFlags */); mPrivateDnsConfig = new PrivateDnsConfig(mPrivateDnsProviderHostname, ips); } catch (UnknownHostException uhe) { mPrivateDnsConfig = null; diff --git a/services/net/java/android/net/dns/ResolvUtil.java b/services/net/java/android/net/dns/ResolvUtil.java index a2a6615e5f48..d9d4b96f66d0 100644 --- a/services/net/java/android/net/dns/ResolvUtil.java +++ b/services/net/java/android/net/dns/ResolvUtil.java @@ -16,6 +16,8 @@ package android.net.dns; +import static android.system.OsConstants.AI_ADDRCONFIG; + import android.net.Network; import android.net.NetworkUtils; import android.system.GaiException; @@ -41,12 +43,17 @@ public class ResolvUtil { public static InetAddress[] blockingResolveAllLocally(Network network, String name) throws UnknownHostException { + // Use AI_ADDRCONFIG by default + return blockingResolveAllLocally(network, name, AI_ADDRCONFIG); + } + + public static InetAddress[] blockingResolveAllLocally( + Network network, String name, int aiFlags) throws UnknownHostException { final StructAddrinfo hints = new StructAddrinfo(); - // Unnecessary, but expressly no AI_ADDRCONFIG. - hints.ai_flags = 0; - // Fetch all IP addresses at once to minimize re-resolution. + hints.ai_flags = aiFlags; + // Other hints identical to the default Inet6AddressImpl implementation hints.ai_family = OsConstants.AF_UNSPEC; - hints.ai_socktype = OsConstants.SOCK_DGRAM; + hints.ai_socktype = OsConstants.SOCK_STREAM; final Network networkForResolv = getNetworkWithUseLocalNameserversFlag(network); |