Version 2.17.0-264.0.dev

Merge commit '4c0387461c41cb66d26a43e3104879f7a83922a5' into 'dev'
diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc
index d73c065..5f2e056 100644
--- a/runtime/bin/dartutils.cc
+++ b/runtime/bin/dartutils.cc
@@ -680,9 +680,6 @@
   Dart_Handle type = GetDartType(kIOLibURL, "OSError");
   ASSERT(!Dart_IsError(type));
   Dart_Handle args[2];
-  if (os_error->code() == 0) {
-    FATAL("Fatal error OSError (code : 0)  DartUtils::NewDartOSError");
-  }
   args[0] = NewString(os_error->message());
   args[1] = Dart_NewInteger(os_error->code());
   return Dart_New(type, Dart_Null(), 2, args);
diff --git a/runtime/bin/socket.cc b/runtime/bin/socket.cc
index 708bda4..21bfadf 100644
--- a/runtime/bin/socket.cc
+++ b/runtime/bin/socket.cc
@@ -914,18 +914,7 @@
       Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
   OSError os_error;
   SocketBase::GetError(socket->fd(), &os_error);
-  if (os_error.code() != 0) {
-    Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
-  } else {
-    Dart_SetReturnValue(args, Dart_Null());
-  }
-}
-
-void FUNCTION_NAME(Socket_Fatal)(Dart_NativeArguments args) {
-  Dart_Handle msg = Dart_GetNativeArgument(args, 0);
-  const char* msgStr =
-      (!Dart_IsNull(msg)) ? DartUtils::GetStringValue(msg) : nullptr;
-  FATAL("Fatal error in dart:io (socket): %s", msgStr);
+  Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
 }
 
 void FUNCTION_NAME(Socket_GetFD)(Dart_NativeArguments args) {
diff --git a/sdk/lib/_internal/vm/bin/socket_patch.dart b/sdk/lib/_internal/vm/bin/socket_patch.dart
index d0bddf8..7c9925a 100644
--- a/sdk/lib/_internal/vm/bin/socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/socket_patch.dart
@@ -877,8 +877,8 @@
         // the SO_ERROR option at level SOL_SOCKET to determine whether
         // connect() completed successfully (SO_ERROR is zero) or
         // unsuccessfully.
-        final osError = socket.nativeGetError();
-        if (osError != null) {
+        final OSError osError = socket.nativeGetError();
+        if (osError.errorCode != 0) {
           socket.close();
           error ??= osError;
           connectNext();
@@ -1404,12 +1404,8 @@
 
         if (i == errorEvent) {
           if (!isClosing) {
-            final osError = nativeGetError();
-            if (osError == null) {
-              _nativeFatal("Reporting error with OSError code of 0");
-            } else {
-              reportError(osError, null, osError.message);
-            }
+            final err = nativeGetError();
+            reportError(err, null, err.message);
           }
         } else if (!isClosed) {
           // If the connection is closed right after it's accepted, there's a
@@ -1692,7 +1688,7 @@
   @pragma("vm:external-name", "Socket_GetFD")
   external int get fd;
   @pragma("vm:external-name", "Socket_GetError")
-  external OSError? nativeGetError();
+  external OSError nativeGetError();
   @pragma("vm:external-name", "Socket_GetOption")
   external nativeGetOption(int option, int protocol);
   @pragma("vm:external-name", "Socket_GetRawOption")
@@ -1707,8 +1703,6 @@
   @pragma("vm:external-name", "Socket_LeaveMulticast")
   external void nativeLeaveMulticast(
       Uint8List addr, Uint8List? interfaceAddr, int interfaceIndex);
-  @pragma("vm:external-name", "Socket_Fatal")
-  external static void _nativeFatal(msg);
 }
 
 class _RawServerSocket extends Stream<RawSocket> implements RawServerSocket {
diff --git a/tools/VERSION b/tools/VERSION
index d9a3698..52b8d5b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 263
+PRERELEASE 264
 PRERELEASE_PATCH 0
\ No newline at end of file