Clear DNS cache after every network access.

If the app tries to make a network connection in the
foreground immediately after trying to do the same when
it's network access was blocked, it could receive a
UnknownHostException due to the cached DNS entry.
So, clear the dns cache after every network access for
now until we have a fix on the platform side.

Bug: 237549250
Bug: 238064333
Bug: 237556596
Bug: 238962235
Bug: 238833668
Bug: 239262832
Test: atest ./tests/cts/hostside/src/com/android/cts/net/HostsideRestrictBackgroundNetworkTests.java
Ignore-AOSP-First: Will be cherrypicked to aosp later
Change-Id: Ic603b1bd9da24ee3724054c4a91794ee569e97f6
This commit is contained in:
Sudheer Shanka 2022-07-11 18:07:47 +00:00
commit 2790990866
2 changed files with 7 additions and 1 deletions

View file

@ -21,7 +21,7 @@ package {
android_test_helper_app {
name: "CtsHostsideNetworkTestsApp2",
defaults: ["cts_support_defaults"],
sdk_version: "test_current",
platform_apis: true,
static_libs: [
"androidx.annotation_annotation",
"CtsHostsideNetworkTestsAidl",

View file

@ -48,6 +48,7 @@ import android.util.Log;
import android.widget.Toast;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.URL;
/**
@ -182,6 +183,11 @@ public class MyBroadcastReceiver extends BroadcastReceiver {
checkStatus = false;
checkDetails = "Exception getting " + address + ": " + e;
}
// If the app tries to make a network connection in the foreground immediately after
// trying to do the same when it's network access was blocked, it could receive a
// UnknownHostException due to the cached DNS entry. So, clear the dns cache after
// every network access for now until we have a fix on the platform side.
InetAddress.clearDnsCache();
Log.d(TAG, checkDetails);
final String state, detailedState;
if (networkInfo != null) {