================ @@ -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 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits