rupprecht updated this revision to Diff 458609.
rupprecht added a comment.

- Add a GetLocalhostIp helper to socket host utilities


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D133393/new/

https://reviews.llvm.org/D133393

Files:
  lldb/unittests/TestingSupport/Host/SocketTestUtilities.cpp
  lldb/unittests/TestingSupport/Host/SocketTestUtilities.h
  lldb/unittests/tools/lldb-server/tests/CMakeLists.txt
  lldb/unittests/tools/lldb-server/tests/TestClient.cpp


Index: lldb/unittests/tools/lldb-server/tests/TestClient.cpp
===================================================================
--- lldb/unittests/tools/lldb-server/tests/TestClient.cpp
+++ lldb/unittests/tools/lldb-server/tests/TestClient.cpp
@@ -7,6 +7,7 @@
 
//===----------------------------------------------------------------------===//
 
 #include "TestClient.h"
+#include "TestingSupport/Host/SocketTestUtilities.h"
 #include "lldb/Host/HostInfo.h"
 #include "lldb/Host/common/TCPSocket.h"
 #include "lldb/Host/posix/ConnectionFileDescriptorPosix.h"
@@ -77,14 +78,20 @@
       args.AppendArgument("--log-flags=0x800000");
   }
 
+  auto LocalhostIpOrErr = GetLocalhostIp();
+  if (!LocalhostIpOrErr)
+    return LocalhostIpOrErr.takeError();
+  const std::string &LocalhostIp = *LocalhostIpOrErr;
+
   Status status;
   TCPSocket listen_socket(true, false);
-  status = listen_socket.Listen("127.0.0.1:0", 5);
+  status = listen_socket.Listen(LocalhostIp + ":0", 5);
   if (status.Fail())
     return status.ToError();
 
   args.AppendArgument(
-      ("127.0.0.1:" + Twine(listen_socket.GetLocalPortNumber())).str());
+      formatv("{0}:{1}", LocalhostIp, listen_socket.GetLocalPortNumber())
+          .str());
 
   for (StringRef arg : ServerArgs)
     args.AppendArgument(arg);
Index: lldb/unittests/tools/lldb-server/tests/CMakeLists.txt
===================================================================
--- lldb/unittests/tools/lldb-server/tests/CMakeLists.txt
+++ lldb/unittests/tools/lldb-server/tests/CMakeLists.txt
@@ -7,6 +7,7 @@
   LINK_LIBS
     lldbHost
     lldbCore
+    lldbHostHelpers
     lldbInterpreter
     lldbTarget
     lldbPluginPlatformLinux
Index: lldb/unittests/TestingSupport/Host/SocketTestUtilities.h
===================================================================
--- lldb/unittests/TestingSupport/Host/SocketTestUtilities.h
+++ lldb/unittests/TestingSupport/Host/SocketTestUtilities.h
@@ -42,6 +42,13 @@
 
 bool HostSupportsIPv6();
 bool HostSupportsIPv4();
+
+/// Return an IP for localhost based on host support.
+///
+/// This will return either "127.0.0.1" if IPv4 is detected, or "[::1]" if IPv6
+/// is detected. If neither are detected, return an error.
+llvm::Expected<std::string> GetLocalhostIp();
+
 } // namespace lldb_private
 
 #endif
Index: lldb/unittests/TestingSupport/Host/SocketTestUtilities.cpp
===================================================================
--- lldb/unittests/TestingSupport/Host/SocketTestUtilities.cpp
+++ lldb/unittests/TestingSupport/Host/SocketTestUtilities.cpp
@@ -126,3 +126,13 @@
 bool lldb_private::HostSupportsIPv6() {
   return CheckIPSupport("IPv6", "[::1]:0");
 }
+
+llvm::Expected<std::string> lldb_private::GetLocalhostIp() {
+  if (HostSupportsIPv4())
+    return "127.0.0.1";
+  if (HostSupportsIPv6())
+    return "[::1]";
+  return llvm::make_error<llvm::StringError>(
+      "Neither IPv4 nor IPv6 appear to be supported",
+      llvm::inconvertibleErrorCode());
+}


Index: lldb/unittests/tools/lldb-server/tests/TestClient.cpp
===================================================================
--- lldb/unittests/tools/lldb-server/tests/TestClient.cpp
+++ lldb/unittests/tools/lldb-server/tests/TestClient.cpp
@@ -7,6 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "TestClient.h"
+#include "TestingSupport/Host/SocketTestUtilities.h"
 #include "lldb/Host/HostInfo.h"
 #include "lldb/Host/common/TCPSocket.h"
 #include "lldb/Host/posix/ConnectionFileDescriptorPosix.h"
@@ -77,14 +78,20 @@
       args.AppendArgument("--log-flags=0x800000");
   }
 
+  auto LocalhostIpOrErr = GetLocalhostIp();
+  if (!LocalhostIpOrErr)
+    return LocalhostIpOrErr.takeError();
+  const std::string &LocalhostIp = *LocalhostIpOrErr;
+
   Status status;
   TCPSocket listen_socket(true, false);
-  status = listen_socket.Listen("127.0.0.1:0", 5);
+  status = listen_socket.Listen(LocalhostIp + ":0", 5);
   if (status.Fail())
     return status.ToError();
 
   args.AppendArgument(
-      ("127.0.0.1:" + Twine(listen_socket.GetLocalPortNumber())).str());
+      formatv("{0}:{1}", LocalhostIp, listen_socket.GetLocalPortNumber())
+          .str());
 
   for (StringRef arg : ServerArgs)
     args.AppendArgument(arg);
Index: lldb/unittests/tools/lldb-server/tests/CMakeLists.txt
===================================================================
--- lldb/unittests/tools/lldb-server/tests/CMakeLists.txt
+++ lldb/unittests/tools/lldb-server/tests/CMakeLists.txt
@@ -7,6 +7,7 @@
   LINK_LIBS
     lldbHost
     lldbCore
+    lldbHostHelpers
     lldbInterpreter
     lldbTarget
     lldbPluginPlatformLinux
Index: lldb/unittests/TestingSupport/Host/SocketTestUtilities.h
===================================================================
--- lldb/unittests/TestingSupport/Host/SocketTestUtilities.h
+++ lldb/unittests/TestingSupport/Host/SocketTestUtilities.h
@@ -42,6 +42,13 @@
 
 bool HostSupportsIPv6();
 bool HostSupportsIPv4();
+
+/// Return an IP for localhost based on host support.
+///
+/// This will return either "127.0.0.1" if IPv4 is detected, or "[::1]" if IPv6
+/// is detected. If neither are detected, return an error.
+llvm::Expected<std::string> GetLocalhostIp();
+
 } // namespace lldb_private
 
 #endif
Index: lldb/unittests/TestingSupport/Host/SocketTestUtilities.cpp
===================================================================
--- lldb/unittests/TestingSupport/Host/SocketTestUtilities.cpp
+++ lldb/unittests/TestingSupport/Host/SocketTestUtilities.cpp
@@ -126,3 +126,13 @@
 bool lldb_private::HostSupportsIPv6() {
   return CheckIPSupport("IPv6", "[::1]:0");
 }
+
+llvm::Expected<std::string> lldb_private::GetLocalhostIp() {
+  if (HostSupportsIPv4())
+    return "127.0.0.1";
+  if (HostSupportsIPv6())
+    return "[::1]";
+  return llvm::make_error<llvm::StringError>(
+      "Neither IPv4 nor IPv6 appear to be supported",
+      llvm::inconvertibleErrorCode());
+}
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to