From 6e7565766dd8a3b8c45b878328f396d5344c4983 Mon Sep 17 00:00:00 2001 From: ayeteadoe Date: Mon, 14 Jul 2025 09:07:02 -0700 Subject: [PATCH] LibCore: Implement LocalSocket::connect() on Windows --- Libraries/LibCore/SocketWindows.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/Libraries/LibCore/SocketWindows.cpp b/Libraries/LibCore/SocketWindows.cpp index 7a61633be5c..7ccb44ca92e 100644 --- a/Libraries/LibCore/SocketWindows.cpp +++ b/Libraries/LibCore/SocketWindows.cpp @@ -163,6 +163,19 @@ ErrorOr LocalSocket::release_fd() return fd; } +ErrorOr> LocalSocket::connect(ByteString const& path, PreventSIGPIPE prevent_sigpipe) +{ + auto socket = TRY(adopt_nonnull_own_or_enomem(new (nothrow) LocalSocket(prevent_sigpipe))); + + auto fd = TRY(create_fd(SocketDomain::Local, SocketType::Stream)); + socket->m_helper.set_fd(fd); + + TRY(connect_local(fd, path)); + + socket->setup_notifier(); + return socket; +} + ErrorOr Socket::create_fd(SocketDomain domain, SocketType type) { int socket_domain; @@ -252,6 +265,19 @@ ErrorOr Socket::connect_inet(int fd, SocketAddress const& address) } } +ErrorOr Socket::connect_local(int fd, ByteString const& path) +{ + auto address = SocketAddress::local(path); + auto maybe_sockaddr = address.to_sockaddr_un(); + if (!maybe_sockaddr.has_value()) { + dbgln("Core::Socket::connect_local: Could not obtain a sockaddr_un"); + return Error::from_errno(EINVAL); + } + + auto addr = maybe_sockaddr.release_value(); + return System::connect(fd, bit_cast(&addr), sizeof(addr)); +} + ErrorOr> TCPSocket::connect(ByteString const& host, u16 port) { auto ip_addresses = TRY(resolve_host(host, SocketType::Stream));