[Lldb-commits] [lldb] [lldb] Add Socket::CreatePair (PR #145015)

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Fri Jun 20 11:17:13 PDT 2025


================
@@ -52,6 +52,34 @@ TCPSocket::TCPSocket(NativeSocket socket, bool should_close)
 
 TCPSocket::~TCPSocket() { CloseListenSockets(); }
 
+llvm::Expected<
+    std::pair<std::unique_ptr<TCPSocket>, std::unique_ptr<TCPSocket>>>
+TCPSocket::CreatePair() {
+  auto listen_socket_up = std::make_unique<TCPSocket>(true);
+  if (Status error = listen_socket_up->Listen("localhost:0", 5); error.Fail())
+    return error.takeError();
+
+  std::string connect_address =
+      llvm::StringRef(listen_socket_up->GetListeningConnectionURI()[0])
+          .split("://")
+          .second.str();
+
+  auto connect_socket_up = std::make_unique<TCPSocket>(true);
+  if (Status error = connect_socket_up->Connect(connect_address); error.Fail())
+    return error.takeError();
+
+  // Connection has already been made above, so a short timeout is sufficient.
+  Socket *accept_socket;
+  if (Status error =
+          listen_socket_up->Accept(std::chrono::seconds(1), accept_socket);
----------------
JDevlieghere wrote:

Can you think of a reason why we couldn't change the signature of `Socket::Accept` to return an `llvm::Expected<std::unique_ptr>>` instead of this Status + Socket* out parameter? Not trying to sign you up for it but it stands out. 

https://github.com/llvm/llvm-project/pull/145015


More information about the lldb-commits mailing list