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