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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits