diff --git a/sdk/lib/_http/embedder_config.dart b/sdk/lib/_http/embedder_config.dart
deleted file mode 100644
index 8a12201..0000000
--- a/sdk/lib/_http/embedder_config.dart
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of dart._http;
-
-/// Embedder-specific `dart:_http` configuration.
-
-/// [HttpClient] will disallow HTTP URLs if this value is set to `false`.
-///
-/// TODO(https://github.com/dart-lang/sdk/issues/41796): This setting will be
-/// removed in favor of explicit domain settings.
-@deprecated
-@pragma("vm:entry-point")
-bool _embedderAllowsHttp = true;
diff --git a/sdk/lib/_http/http.dart b/sdk/lib/_http/http.dart
index 7fc8b40..6e80086 100644
--- a/sdk/lib/_http/http.dart
+++ b/sdk/lib/_http/http.dart
@@ -23,7 +23,6 @@
 import 'dart:typed_data';
 
 part 'crypto.dart';
-part 'embedder_config.dart';
 part 'http_date.dart';
 part 'http_headers.dart';
 part 'http_impl.dart';
diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart
index 4cdd14f..b5e814f 100644
--- a/sdk/lib/io/socket.dart
+++ b/sdk/lib/io/socket.dart
@@ -801,10 +801,6 @@
       {sourceAddress, Duration? timeout}) {
     final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
-      if (!isInsecureConnectionAllowed(host)) {
-        throw new SocketException(
-            "Insecure socket connections are disallowed by platform: $host");
-      }
       return Socket._connect(host, port,
           sourceAddress: sourceAddress, timeout: timeout);
     }
@@ -819,10 +815,6 @@
       {sourceAddress}) {
     final IOOverrides? overrides = IOOverrides.current;
     if (overrides == null) {
-      if (!isInsecureConnectionAllowed(host)) {
-        throw new SocketException(
-            "Insecure socket connections are disallowed by platform: $host");
-      }
       return Socket._startConnect(host, port, sourceAddress: sourceAddress);
     }
     return overrides.socketStartConnect(host, port,
diff --git a/tests/standalone/io/http_cookie_date_test.dart b/tests/standalone/io/http_cookie_date_test.dart
index 54996f0..2d6f70f 100644
--- a/tests/standalone/io/http_cookie_date_test.dart
+++ b/tests/standalone/io/http_cookie_date_test.dart
@@ -18,7 +18,6 @@
     show Since, valueOfNonNullableParamWithDefault, HttpStatus;
 
 part "../../../sdk/lib/_http/crypto.dart";
-part "../../../sdk/lib/_http/embedder_config.dart";
 part "../../../sdk/lib/_http/http_impl.dart";
 part "../../../sdk/lib/_http/http_date.dart";
 part "../../../sdk/lib/_http/http_parser.dart";
diff --git a/tests/standalone/io/http_headers_test.dart b/tests/standalone/io/http_headers_test.dart
index 11e0f89..860b0b1 100644
--- a/tests/standalone/io/http_headers_test.dart
+++ b/tests/standalone/io/http_headers_test.dart
@@ -19,7 +19,6 @@
     show Since, valueOfNonNullableParamWithDefault, HttpStatus;
 
 part "../../../sdk/lib/_http/crypto.dart";
-part "../../../sdk/lib/_http/embedder_config.dart";
 part "../../../sdk/lib/_http/http_impl.dart";
 part "../../../sdk/lib/_http/http_date.dart";
 part "../../../sdk/lib/_http/http_parser.dart";
diff --git a/tests/standalone/io/http_parser_test.dart b/tests/standalone/io/http_parser_test.dart
index 0830f77..fa7499c 100644
--- a/tests/standalone/io/http_parser_test.dart
+++ b/tests/standalone/io/http_parser_test.dart
@@ -19,7 +19,6 @@
     show Since, valueOfNonNullableParamWithDefault, HttpStatus;
 
 part "../../../sdk/lib/_http/crypto.dart";
-part "../../../sdk/lib/_http/embedder_config.dart";
 part "../../../sdk/lib/_http/http_impl.dart";
 part "../../../sdk/lib/_http/http_date.dart";
 part "../../../sdk/lib/_http/http_parser.dart";
diff --git a/tests/standalone/io/socket_network_policy_localhost_test.dart b/tests/standalone/io/socket_network_policy_localhost_test.dart
deleted file mode 100644
index 957f894..0000000
--- a/tests/standalone/io/socket_network_policy_localhost_test.dart
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Test whether localhost connection succeeds even when insecure connections
-// are banned by default.
-// SharedOptions=-Ddart.library.io.may_insecurely_connect_to_all_domains=false
-
-import 'dart:async';
-import 'dart:io';
-
-import "package:async_helper/async_helper.dart";
-
-void testDisallowedConnectionByDefault() {
-  asyncExpectThrows(
-      () async => await Socket.connect("domain.invalid", 80),
-      (e) =>
-          e is SocketException &&
-          e.message.contains(
-              "Insecure socket connections are disallowed by platform"));
-}
-
-Future<void> testLocalhostConnection() async {
-  ServerSocket server =
-      await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
-  Socket? socket;
-  try {
-    server.listen((_) {});
-    socket = await Socket.connect(InternetAddress.loopbackIPv4, server.port);
-  } finally {
-    server.close();
-    if (socket != null) {
-      socket.close();
-      await socket.done;
-      socket.destroy();
-    }
-  }
-}
-
-Future<void> test() async {
-  testDisallowedConnectionByDefault();
-  await testLocalhostConnection();
-}
-
-void main() {
-  asyncStart();
-  test().whenComplete(() => asyncEnd());
-}
diff --git a/tests/standalone/io/socket_network_policy_test.dart b/tests/standalone/io/socket_network_policy_test.dart
deleted file mode 100644
index f476d67..0000000
--- a/tests/standalone/io/socket_network_policy_test.dart
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// SharedOptions=-Ddart.library.io.domain_network_policies=[["notallowed.domain.invalid",true,false]]
-
-import 'dart:io';
-
-import "package:async_helper/async_helper.dart";
-
-void testDisallowedConnection() {
-  asyncExpectThrows(
-      () async => await Socket.connect("foo.notallowed.domain.invalid", 12345),
-      (e) {
-    print((e as SocketException).message);
-    return e is SocketException &&
-        e.message.startsWith(
-            "Insecure socket connections are disallowed by platform");
-  });
-}
-
-void testAllowedConnection() {
-  asyncExpectThrows(
-      () async => await Socket.connect("allowed.domain.invalid", 12345),
-      (e) =>
-          e is SocketException &&
-          !e.message.startsWith(
-              "Insecure socket connections are disallowed by platform"));
-}
-
-void main() {
-  testDisallowedConnection();
-  testAllowedConnection();
-}
diff --git a/tests/standalone/io/web_socket_protocol_processor_test.dart b/tests/standalone/io/web_socket_protocol_processor_test.dart
index 344a0b9..71e7e45 100644
--- a/tests/standalone/io/web_socket_protocol_processor_test.dart
+++ b/tests/standalone/io/web_socket_protocol_processor_test.dart
@@ -20,7 +20,6 @@
     show Since, valueOfNonNullableParamWithDefault, HttpStatus;
 
 part "../../../sdk/lib/_http/crypto.dart";
-part "../../../sdk/lib/_http/embedder_config.dart";
 part "../../../sdk/lib/_http/http_impl.dart";
 part "../../../sdk/lib/_http/http_date.dart";
 part "../../../sdk/lib/_http/http_parser.dart";
diff --git a/tests/standalone/standalone_kernel.status b/tests/standalone/standalone_kernel.status
index 7376264..aa8621f 100644
--- a/tests/standalone/standalone_kernel.status
+++ b/tests/standalone/standalone_kernel.status
@@ -19,7 +19,6 @@
 io/network_policy_configuration_test: Skip # Can't pass -D params containing quotes to adb.
 io/network_policy_invalid_domain_test: Skip # Can't pass -D params containing quotes to adb.
 io/network_policy_tie_breaker_test: Skip # Can't pass -D params containing quotes to adb.
-io/socket_network_policy_test: Skip # Can't pass -D params containing quotes to adb.
 
 [ $arch == ia32 && $builder_tag == optimization_counter_threshold ]
 io/file_lock_test: SkipSlow # Timeout
diff --git a/tests/standalone_2/io/socket_network_policy_localhost_test.dart b/tests/standalone_2/io/socket_network_policy_localhost_test.dart
deleted file mode 100644
index e531815..0000000
--- a/tests/standalone_2/io/socket_network_policy_localhost_test.dart
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Test whether localhost connection succeeds even when insecure connections
-// are banned by default.
-// SharedOptions=-Ddart.library.io.may_insecurely_connect_to_all_domains=false
-
-import 'dart:async';
-import 'dart:io';
-
-import "package:async_helper/async_helper.dart";
-
-void testDisallowedConnectionByDefault() {
-  asyncExpectThrows(
-      () async => await Socket.connect("domain.invalid", 80),
-      (e) =>
-          e is SocketException &&
-          e.message.contains(
-              "Insecure socket connections are disallowed by platform"));
-}
-
-Future<void> testLocalhostConnection() async {
-  ServerSocket server =
-      await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
-  Socket socket;
-  try {
-    server.listen((_) {});
-    socket = await Socket.connect(InternetAddress.loopbackIPv4, server.port);
-  } finally {
-    server.close();
-    if (socket != null) {
-      socket.close();
-      await socket.done;
-      socket.destroy();
-    }
-  }
-}
-
-Future<void> test() async {
-  testDisallowedConnectionByDefault();
-  await testLocalhostConnection();
-}
-
-void main() {
-  asyncStart();
-  test().whenComplete(() => asyncEnd());
-}
diff --git a/tests/standalone_2/io/socket_network_policy_test.dart b/tests/standalone_2/io/socket_network_policy_test.dart
deleted file mode 100644
index f476d67..0000000
--- a/tests/standalone_2/io/socket_network_policy_test.dart
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// SharedOptions=-Ddart.library.io.domain_network_policies=[["notallowed.domain.invalid",true,false]]
-
-import 'dart:io';
-
-import "package:async_helper/async_helper.dart";
-
-void testDisallowedConnection() {
-  asyncExpectThrows(
-      () async => await Socket.connect("foo.notallowed.domain.invalid", 12345),
-      (e) {
-    print((e as SocketException).message);
-    return e is SocketException &&
-        e.message.startsWith(
-            "Insecure socket connections are disallowed by platform");
-  });
-}
-
-void testAllowedConnection() {
-  asyncExpectThrows(
-      () async => await Socket.connect("allowed.domain.invalid", 12345),
-      (e) =>
-          e is SocketException &&
-          !e.message.startsWith(
-              "Insecure socket connections are disallowed by platform"));
-}
-
-void main() {
-  testDisallowedConnection();
-  testAllowedConnection();
-}
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index 7376264..aa8621f 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -19,7 +19,6 @@
 io/network_policy_configuration_test: Skip # Can't pass -D params containing quotes to adb.
 io/network_policy_invalid_domain_test: Skip # Can't pass -D params containing quotes to adb.
 io/network_policy_tie_breaker_test: Skip # Can't pass -D params containing quotes to adb.
-io/socket_network_policy_test: Skip # Can't pass -D params containing quotes to adb.
 
 [ $arch == ia32 && $builder_tag == optimization_counter_threshold ]
 io/file_lock_test: SkipSlow # Timeout
diff --git a/tools/VERSION b/tools/VERSION
index db09144..787a74e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 10
 PATCH 0
-PRERELEASE 97
+PRERELEASE 98
 PRERELEASE_PATCH 0
\ No newline at end of file
