diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
index db58a6d..2dfbd42 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
@@ -60,7 +60,7 @@
         var node = _findNode();
         if (node != null) {
           var uriEnd = node.uri.end;
-          var prefixEnd = element.prefixOffset + prefix.nameLength;
+          var prefixEnd = prefix.nameOffset + prefix.nameLength;
           edit = newSourceEdit_range(
               range.startOffsetEndOffset(uriEnd, prefixEnd), '');
         }
@@ -72,7 +72,7 @@
             edit = newSourceEdit_range(SourceRange(uriEnd, 0), ' as $newName');
           }
         } else {
-          var offset = element.prefixOffset;
+          var offset = prefix.nameOffset;
           var length = prefix.nameLength;
           edit = newSourceEdit_range(SourceRange(offset, length), newName);
         }
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 2dd64a6..6853504 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -2,6 +2,7 @@
 * Added `StringInterpolation.firstString` and `lastString`, to express
   explicitly  that there are always (possibly empty) strings as the first
   and the last elements of an interpolation.
+* Deprecated `ImportElement.prefixOffset`, use `prefix.nameOffset` instead.
 
 ## 1.7.0
 * Require `meta: ^1.4.0`.
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 596c1b6..eb07ad0 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -1284,6 +1284,7 @@
   /// Return the offset of the prefix of this import in the file that contains
   /// this import directive, or `-1` if this import is synthetic, does not have
   /// a prefix, or otherwise does not have an offset.
+  @Deprecated('Use prefix.nameOffset instead')
   int get prefixOffset;
 }
 
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index e41c39c..b8b5942 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -3434,9 +3434,6 @@
   PrefixElement? prefix;
 
   @override
-  int prefixOffset = -1;
-
-  @override
   List<NamespaceCombinator> combinators = const [];
 
   /// The cached value of [namespace].
@@ -3474,6 +3471,10 @@
         NamespaceBuilder().createImportNamespaceForDirective(this);
   }
 
+  @Deprecated('Use prefix.nameOffset instead')
+  @override
+  int get prefixOffset => prefix?.nameOffset ?? -1;
+
   @override
   T? accept<T>(ElementVisitor<T> visitor) => visitor.visitImportElement(this);
 
diff --git a/pkg/analyzer/lib/src/summary2/informative_data.dart b/pkg/analyzer/lib/src/summary2/informative_data.dart
index 132f6fd..3e691ca 100644
--- a/pkg/analyzer/lib/src/summary2/informative_data.dart
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -340,7 +340,6 @@
       (element, info) {
         element as ImportElementImpl;
         element.nameOffset = info.nameOffset;
-        element.prefixOffset = info.prefixOffset;
 
         var prefix = element.prefix;
         if (prefix is PrefixElementImpl) {
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index e3e0548..bd68a35 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -442,11 +442,12 @@
 
       writeIf(e.isDeferred, ' deferred');
 
-      if (e.prefix != null) {
+      var prefix = e.prefix;
+      if (prefix != null) {
         buffer.write(' as ');
-        writeName(e.prefix!);
+        writeName(prefix);
         if (withOffsets) {
-          buffer.write('(${e.prefixOffset})');
+          buffer.write('(${prefix.nameOffset})');
         }
       }
 
diff --git a/runtime/bin/socket_base.cc b/runtime/bin/socket_base.cc
index 7a62ab8..d97ced4 100644
--- a/runtime/bin/socket_base.cc
+++ b/runtime/bin/socket_base.cc
@@ -34,7 +34,8 @@
   }
 }
 
-intptr_t SocketAddress::GetAddrLength(const RawAddr& addr) {
+intptr_t SocketAddress::GetAddrLength(const RawAddr& addr,
+                                      bool unnamed_unix_socket) {
   ASSERT((addr.ss.ss_family == AF_INET) || (addr.ss.ss_family == AF_INET6) ||
          (addr.ss.ss_family == AF_UNIX));
   switch (addr.ss.ss_family) {
@@ -53,7 +54,7 @@
       // trailing null bytes on purpose.
       // https://github.com/dart-lang/sdk/issues/46158
       intptr_t nulls = 0;
-      if (addr.un.sun_path[0] == '\0') {
+      if (!unnamed_unix_socket && addr.un.sun_path[0] == '\0') {
         intptr_t i = sizeof(addr.un.sun_path) - 1;
         while (addr.un.sun_path[i] == '\0') {
           nulls++;
diff --git a/runtime/bin/socket_base.h b/runtime/bin/socket_base.h
index bf9405e..07ee42e 100644
--- a/runtime/bin/socket_base.h
+++ b/runtime/bin/socket_base.h
@@ -69,7 +69,8 @@
   const char* as_string() const { return as_string_; }
   const RawAddr& addr() const { return addr_; }
 
-  static intptr_t GetAddrLength(const RawAddr& addr);
+  static intptr_t GetAddrLength(const RawAddr& addr,
+                                bool unnamed_unix_socket = false);
   static intptr_t GetInAddrLength(const RawAddr& addr);
   static bool AreAddressesEqual(const RawAddr& a, const RawAddr& b);
   static void GetSockAddr(Dart_Handle obj, RawAddr* addr);
diff --git a/runtime/bin/socket_base_android.cc b/runtime/bin/socket_base_android.cc
index 9085f14..68163c6 100644
--- a/runtime/bin/socket_base_android.cc
+++ b/runtime/bin/socket_base_android.cc
@@ -40,7 +40,8 @@
       as_string_[0] = 0;
     }
   }
-  socklen_t salen = GetAddrLength(*reinterpret_cast<RawAddr*>(sa));
+  socklen_t salen =
+      GetAddrLength(*reinterpret_cast<RawAddr*>(sa), unnamed_unix_socket);
   memmove(reinterpret_cast<void*>(&addr_), sa, salen);
 }
 
diff --git a/runtime/bin/socket_base_linux.cc b/runtime/bin/socket_base_linux.cc
index 8734aa6..89e579f 100644
--- a/runtime/bin/socket_base_linux.cc
+++ b/runtime/bin/socket_base_linux.cc
@@ -40,7 +40,8 @@
       as_string_[0] = 0;
     }
   }
-  socklen_t salen = GetAddrLength(*reinterpret_cast<RawAddr*>(sa));
+  socklen_t salen =
+      GetAddrLength(*reinterpret_cast<RawAddr*>(sa), unnamed_unix_socket);
   memmove(reinterpret_cast<void*>(&addr_), sa, salen);
 }
 
diff --git a/runtime/bin/socket_base_macos.cc b/runtime/bin/socket_base_macos.cc
index 74bf924..0b259ee 100644
--- a/runtime/bin/socket_base_macos.cc
+++ b/runtime/bin/socket_base_macos.cc
@@ -39,7 +39,8 @@
       as_string_[0] = 0;
     }
   }
-  socklen_t salen = GetAddrLength(*reinterpret_cast<RawAddr*>(sa));
+  socklen_t salen =
+      GetAddrLength(*reinterpret_cast<RawAddr*>(sa), unnamed_unix_socket);
   memmove(reinterpret_cast<void*>(&addr_), sa, salen);
 }
 
diff --git a/tests/standalone/io/unix_socket_test.dart b/tests/standalone/io/unix_socket_test.dart
index d5ee7cb..7c84792 100644
--- a/tests/standalone/io/unix_socket_test.dart
+++ b/tests/standalone/io/unix_socket_test.dart
@@ -179,6 +179,11 @@
   try {
     var socketAddress = '@hidden';
     var abstractSocketServer = getAbstractSocketTestFileName();
+    // check if the executable exists, some build configurations do not
+    // build it (e.g: precompiled simarm/simarm64)
+    if (!File(abstractSocketServer).existsSync()) {
+      return;
+    }
     process = await Process.start(abstractSocketServer, [socketAddress]);
     var serverAddress =
         InternetAddress(socketAddress, type: InternetAddressType.unix);
diff --git a/tests/standalone_2/io/unix_socket_test.dart b/tests/standalone_2/io/unix_socket_test.dart
index aa86ae8..0549fea 100644
--- a/tests/standalone_2/io/unix_socket_test.dart
+++ b/tests/standalone_2/io/unix_socket_test.dart
@@ -181,6 +181,11 @@
   try {
     var socketAddress = '@hidden';
     var abstractSocketServer = getAbstractSocketTestFileName();
+    // check if the executable exists, some build configurations do not
+    // build it (e.g: precompiled simarm/simarm64)
+    if (!File(abstractSocketServer).existsSync()) {
+      return;
+    }
     process = await Process.start(abstractSocketServer, [socketAddress]);
     var serverAddress =
         InternetAddress(socketAddress, type: InternetAddressType.unix);
diff --git a/tools/VERSION b/tools/VERSION
index e162905..41f2002 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 165
+PRERELEASE 166
 PRERELEASE_PATCH 0
\ No newline at end of file
