[libc-commits] [libc] [llvm] [libc][bazel] Add remaining sys/socket functions and tests (PR #209798)

Pavel Labath via libc-commits libc-commits at lists.llvm.org
Wed Jul 15 23:33:37 PDT 2026


https://github.com/labath updated https://github.com/llvm/llvm-project/pull/209798

>From e3e2b2817fe09738df0be4c299fc65fcad750b8d Mon Sep 17 00:00:00 2001
From: Pavel Labath <pavel at labath.sk>
Date: Tue, 14 Jul 2026 12:04:08 +0000
Subject: [PATCH] [libc][bazel] Add remaining sys/socket functions and tests

This patch adds the following sys/socket functions and syscall wrapper
libraries to BUILD.bazel:
- accept
- accept4
- bind
- connect
- getpeername
- getsockname
- listen
- sockatmark

I'm also enabling the unit tests for these functions. Running AF_UNIX
socket tests under Bazel ran into a problem where the absolute path to
the test sandbox directory exceeds the 108-byte limit of
sockaddr_un::sun_path. To work around that, I added a TestDirectoryScope
helper that temporarily chdirs into the test directory so the tests can
use short relative filenames, and restores the original working
directory on exit.

Assisted by Gemini.
---
 libc/test/src/sys/socket/linux/CMakeLists.txt |   6 +-
 libc/test/src/sys/socket/linux/bind_test.cpp  |   5 +-
 .../sys/socket/linux/connect_accept_test.cpp  |  11 +-
 .../test/src/sys/socket/linux/listen_test.cpp |   5 +-
 .../sys/socket/linux/socket_test_support.h    |  41 ++-
 .../src/sys/socket/linux/sockname_test.cpp    |  23 +-
 .../llvm-project-overlay/libc/BUILD.bazel     | 238 ++++++++++++++++++
 .../libc/test/src/sys/socket/BUILD.bazel      | 118 ++++++++-
 8 files changed, 420 insertions(+), 27 deletions(-)

diff --git a/libc/test/src/sys/socket/linux/CMakeLists.txt b/libc/test/src/sys/socket/linux/CMakeLists.txt
index e444d2168979e..57f90c3ba1862 100644
--- a/libc/test/src/sys/socket/linux/CMakeLists.txt
+++ b/libc/test/src/sys/socket/linux/CMakeLists.txt
@@ -3,14 +3,19 @@ add_header_library(
   HDRS
     socket_test_support.h
   DEPENDS
+    libc.hdr.fcntl_macros
     libc.hdr.sys_socket_macros
     libc.hdr.types.size_t
     libc.hdr.types.socklen_t
     libc.hdr.types.struct_sockaddr_un
     libc.src.__support.common
     libc.src.__support.CPP.string_view
+    libc.src.fcntl.open
     libc.src.string.strncpy
     libc.src.string.strnlen
+    libc.src.unistd.chdir
+    libc.src.unistd.close
+    libc.src.unistd.fchdir
 )
 
 add_custom_target(libc_sys_socket_unittests)
@@ -179,7 +184,6 @@ add_libc_unittest(
   DEPENDS
     .socket_test_support
     libc.hdr.sys_socket_macros
-    libc.hdr.sys_socket_macros
     libc.hdr.types.sa_family_t
     libc.hdr.types.socklen_t
     libc.hdr.types.struct_sockaddr_un
diff --git a/libc/test/src/sys/socket/linux/bind_test.cpp b/libc/test/src/sys/socket/linux/bind_test.cpp
index 6236de08dc3a8..fea268bef74c5 100644
--- a/libc/test/src/sys/socket/linux/bind_test.cpp
+++ b/libc/test/src/sys/socket/linux/bind_test.cpp
@@ -29,9 +29,8 @@ using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
 using LlvmLibcBindTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
 
 TEST_F(LlvmLibcBindTest, BindLocalSocket) {
-
-  const char *FILENAME = "bind_file.test";
-  auto SOCK_PATH = libc_make_test_file_path(FILENAME);
+  LIBC_NAMESPACE::testing::TestDirectoryScope dir_scope;
+  constexpr char SOCK_PATH[] = "bind_file.test";
 
   int sock = LIBC_NAMESPACE::socket(AF_UNIX, SOCK_DGRAM, 0);
   ASSERT_GE(sock, 0);
diff --git a/libc/test/src/sys/socket/linux/connect_accept_test.cpp b/libc/test/src/sys/socket/linux/connect_accept_test.cpp
index d0446590ffef6..743d0ce59f51d 100644
--- a/libc/test/src/sys/socket/linux/connect_accept_test.cpp
+++ b/libc/test/src/sys/socket/linux/connect_accept_test.cpp
@@ -34,13 +34,12 @@ using LlvmLibcConnectAcceptTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
 using LIBC_NAMESPACE::cpp::scope_exit;
 
 TEST_F(LlvmLibcConnectAcceptTest, ConnectLocalSocket) {
-  const char *CONNECT_FILE = "connect_file.test";
-  const auto CONNECT_PATH = libc_make_test_file_path(CONNECT_FILE);
+  LIBC_NAMESPACE::testing::TestDirectoryScope dir_scope;
+  constexpr char CONNECT_PATH[] = "connect_file.test";
   struct sockaddr_un connect_addr;
   ASSERT_TRUE(make_sockaddr_un(CONNECT_PATH, connect_addr));
 
-  const char *ACCEPT_FILE = "accept_file.test";
-  const auto ACCEPT_PATH = libc_make_test_file_path(ACCEPT_FILE);
+  constexpr char ACCEPT_PATH[] = "accept_file.test";
   struct sockaddr_un accept_addr;
   ASSERT_TRUE(make_sockaddr_un(ACCEPT_PATH, accept_addr));
 
@@ -124,8 +123,8 @@ TEST_F(LlvmLibcConnectAcceptTest, ConnectLocalSocket) {
 }
 
 TEST_F(LlvmLibcConnectAcceptTest, Accept4Flags) {
-  const char *ACCEPT_FILE = "accept4_file.test";
-  auto ACCEPT_PATH = libc_make_test_file_path(ACCEPT_FILE);
+  LIBC_NAMESPACE::testing::TestDirectoryScope dir_scope;
+  constexpr char ACCEPT_PATH[] = "accept4_file.test";
   struct sockaddr_un accept_addr;
   ASSERT_TRUE(make_sockaddr_un(ACCEPT_PATH, accept_addr));
 
diff --git a/libc/test/src/sys/socket/linux/listen_test.cpp b/libc/test/src/sys/socket/linux/listen_test.cpp
index 4c1c7d7f223b9..a662b93b54431 100644
--- a/libc/test/src/sys/socket/linux/listen_test.cpp
+++ b/libc/test/src/sys/socket/linux/listen_test.cpp
@@ -26,9 +26,8 @@ using LlvmLibcListenTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
 using LIBC_NAMESPACE::cpp::scope_exit;
 
 TEST_F(LlvmLibcListenTest, ListenLocalSocket) {
-
-  const char *FILENAME = "listen_file.test";
-  auto SOCK_PATH = libc_make_test_file_path(FILENAME);
+  LIBC_NAMESPACE::testing::TestDirectoryScope dir_scope;
+  constexpr char SOCK_PATH[] = "listen_file.test";
 
   int sock = LIBC_NAMESPACE::socket(AF_UNIX, SOCK_STREAM, 0);
   ASSERT_GE(sock, 0);
diff --git a/libc/test/src/sys/socket/linux/socket_test_support.h b/libc/test/src/sys/socket/linux/socket_test_support.h
index ea9130a1644ce..b930f8723f087 100644
--- a/libc/test/src/sys/socket/linux/socket_test_support.h
+++ b/libc/test/src/sys/socket/linux/socket_test_support.h
@@ -1,27 +1,66 @@
-//===-- Helpers for socket tests --------------------------------*- C++ -*-===//
+//===----------------------------------------------------------------------===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 //===----------------------------------------------------------------------===//
+///
+/// \file
+/// Helpers for socket tests.
+///
+//===----------------------------------------------------------------------===//
 
 #ifndef LLVM_LIBC_TEST_SRC_SYS_SOCKET_LINUX_SOCKET_TEST_SUPPORT_H
 #define LLVM_LIBC_TEST_SRC_SYS_SOCKET_LINUX_SOCKET_TEST_SUPPORT_H
 
+#include "hdr/fcntl_macros.h"
 #include "hdr/sys_socket_macros.h"
 #include "hdr/types/size_t.h"
 #include "hdr/types/socklen_t.h"
 #include "hdr/types/struct_sockaddr_un.h"
 #include "src/__support/CPP/string_view.h"
 #include "src/__support/common.h"
+#include "src/fcntl/open.h"
 #include "src/string/strncpy.h"
 #include "src/string/strnlen.h"
+#include "src/unistd/chdir.h"
+#include "src/unistd/close.h"
+#include "src/unistd/fchdir.h"
 #include "test/UnitTest/LibcTest.h"
 
 namespace LIBC_NAMESPACE_DECL {
 namespace testing {
 
+// In Bazel tests, the absolute path to the test output directory exceeds the
+// 108-byte limit of struct sockaddr_un::sun_path. To create AF_UNIX filesystem
+// sockets safely, this RAII class saves the current working directory, changes
+// into the writable test file directory (so short relative filenames can be
+// used), and resets CWD when destroyed.
+class TestDirectoryScope {
+  int cwd_fd;
+
+public:
+  TestDirectoryScope()
+      : cwd_fd(LIBC_NAMESPACE::open(".", O_DIRECTORY | O_CLOEXEC)) {
+    if (cwd_fd < 0)
+      __builtin_trap();
+    if (LIBC_NAMESPACE::chdir(libc_make_test_file_path(".")) != 0)
+      __builtin_trap();
+  }
+  ~TestDirectoryScope() {
+    if (cwd_fd >= 0) {
+      int fchdir_ret = LIBC_NAMESPACE::fchdir(cwd_fd);
+      int close_ret = LIBC_NAMESPACE::close(cwd_fd);
+      if (fchdir_ret != 0 || close_ret != 0)
+        __builtin_trap();
+    }
+  }
+
+  TestDirectoryScope(const TestDirectoryScope &) = delete;
+  TestDirectoryScope &operator=(const TestDirectoryScope &) = delete;
+};
+
 [[nodiscard]] LIBC_INLINE bool make_sockaddr_un(cpp::string_view path,
                                                 struct sockaddr_un &sun) {
   sun.sun_family = AF_UNIX;
diff --git a/libc/test/src/sys/socket/linux/sockname_test.cpp b/libc/test/src/sys/socket/linux/sockname_test.cpp
index a13c9233f4e4a..ccdc5ec557c7e 100644
--- a/libc/test/src/sys/socket/linux/sockname_test.cpp
+++ b/libc/test/src/sys/socket/linux/sockname_test.cpp
@@ -36,6 +36,7 @@ using LlvmLibcSockNameTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
 using LIBC_NAMESPACE::cpp::scope_exit;
 
 TEST_F(LlvmLibcSockNameTest, GetSockNameAndPeerName) {
+  LIBC_NAMESPACE::testing::TestDirectoryScope dir_scope;
   // 1. Invalid Socket
   struct sockaddr_un addr;
   socklen_t addr_len = sizeof(addr);
@@ -68,15 +69,13 @@ TEST_F(LlvmLibcSockNameTest, GetSockNameAndPeerName) {
               Fails(ENOTCONN));
 
   // 3. Connected Sockets
-  const char *client_file = "getsockname_client.test";
-  const auto client_path = libc_make_test_file_path(client_file);
+  constexpr char CLIENT_PATH[] = "getsockname_client.test";
   struct sockaddr_un client_addr;
-  ASSERT_TRUE(make_sockaddr_un(client_path, client_addr));
+  ASSERT_TRUE(make_sockaddr_un(CLIENT_PATH, client_addr));
 
-  const char *server_file = "getsockname_server.test";
-  const auto server_path = libc_make_test_file_path(server_file);
+  constexpr char SERVER_PATH[] = "getsockname_server.test";
   struct sockaddr_un server_addr;
-  ASSERT_TRUE(make_sockaddr_un(server_path, server_addr));
+  ASSERT_TRUE(make_sockaddr_un(SERVER_PATH, server_addr));
 
   int server_sock = LIBC_NAMESPACE::socket(AF_UNIX, SOCK_STREAM, 0);
   ASSERT_GE(server_sock, 0);
@@ -90,7 +89,7 @@ TEST_F(LlvmLibcSockNameTest, GetSockNameAndPeerName) {
                   sizeof(struct sockaddr_un)),
               Succeeds(0));
   scope_exit remove_server_path(
-      [&] { ASSERT_THAT(LIBC_NAMESPACE::remove(server_path), Succeeds(0)); });
+      [&] { ASSERT_THAT(LIBC_NAMESPACE::remove(SERVER_PATH), Succeeds(0)); });
 
   ASSERT_THAT(LIBC_NAMESPACE::listen(server_sock, 1), Succeeds(0));
 
@@ -106,7 +105,7 @@ TEST_F(LlvmLibcSockNameTest, GetSockNameAndPeerName) {
                   sizeof(struct sockaddr_un)),
               Succeeds(0));
   scope_exit remove_client_path(
-      [&] { ASSERT_THAT(LIBC_NAMESPACE::remove(client_path), Succeeds(0)); });
+      [&] { ASSERT_THAT(LIBC_NAMESPACE::remove(CLIENT_PATH), Succeeds(0)); });
 
   ASSERT_THAT(LIBC_NAMESPACE::connect(
                   client_sock,
@@ -127,7 +126,7 @@ TEST_F(LlvmLibcSockNameTest, GetSockNameAndPeerName) {
           client_sock, reinterpret_cast<struct sockaddr *>(&addr), &addr_len),
       Succeeds(0));
   ASSERT_THAT((LIBC_NAMESPACE::testing::SocketAddress{addr, addr_len}),
-              LIBC_NAMESPACE::testing::MatchesAddress(client_path));
+              LIBC_NAMESPACE::testing::MatchesAddress(CLIENT_PATH));
 
   // Test getpeername on client_sock (should be server_path)
   addr_len = sizeof(addr);
@@ -136,7 +135,7 @@ TEST_F(LlvmLibcSockNameTest, GetSockNameAndPeerName) {
           client_sock, reinterpret_cast<struct sockaddr *>(&addr), &addr_len),
       Succeeds(0));
   ASSERT_THAT((LIBC_NAMESPACE::testing::SocketAddress{addr, addr_len}),
-              LIBC_NAMESPACE::testing::MatchesAddress(server_path));
+              LIBC_NAMESPACE::testing::MatchesAddress(SERVER_PATH));
 
   // Test getsockname on accepted_sock (should be server_path)
   addr_len = sizeof(addr);
@@ -145,7 +144,7 @@ TEST_F(LlvmLibcSockNameTest, GetSockNameAndPeerName) {
           accepted_sock, reinterpret_cast<struct sockaddr *>(&addr), &addr_len),
       Succeeds(0));
   ASSERT_THAT((LIBC_NAMESPACE::testing::SocketAddress{addr, addr_len}),
-              LIBC_NAMESPACE::testing::MatchesAddress(server_path));
+              LIBC_NAMESPACE::testing::MatchesAddress(SERVER_PATH));
 
   // Test getpeername on accepted_sock (should be client_path)
   addr_len = sizeof(addr);
@@ -154,5 +153,5 @@ TEST_F(LlvmLibcSockNameTest, GetSockNameAndPeerName) {
           accepted_sock, reinterpret_cast<struct sockaddr *>(&addr), &addr_len),
       Succeeds(0));
   ASSERT_THAT((LIBC_NAMESPACE::testing::SocketAddress{addr, addr_len}),
-              LIBC_NAMESPACE::testing::MatchesAddress(client_path));
+              LIBC_NAMESPACE::testing::MatchesAddress(CLIENT_PATH));
 }
diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
index f756c1b7162f2..07c19ec5be266 100644
--- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -456,6 +456,11 @@ libc_support_library(
     hdrs = ["hdr/fcntl_overlay.h"],
 )
 
+libc_support_library(
+    name = "hdr_netinet_in_macros",
+    hdrs = ["hdr/netinet_in_macros.h"],
+)
+
 libc_support_library(
     name = "hdr_signal_macros",
     hdrs = ["hdr/signal_macros.h"],
@@ -783,6 +788,16 @@ libc_support_library(
     hdrs = ["hdr/types/struct_sockaddr.h"],
 )
 
+libc_support_library(
+    name = "types_struct_sockaddr_in",
+    hdrs = ["hdr/types/struct_sockaddr_in.h"],
+)
+
+libc_support_library(
+    name = "types_struct_sockaddr_in6",
+    hdrs = ["hdr/types/struct_sockaddr_in6.h"],
+)
+
 libc_support_library(
     name = "types_struct_sockaddr_storage",
     hdrs = ["hdr/types/struct_sockaddr_storage.h"],
@@ -2502,6 +2517,57 @@ libc_support_library(
     ],
 )
 
+libc_support_library(
+    name = "__support_osutil_linux_syscall_wrappers_accept",
+    hdrs = ["src/__support/OSUtil/linux/syscall_wrappers/accept.h"],
+    target_compatible_with = select({
+        "@platforms//os:linux": [],
+        "//conditions:default": ["@platforms//:incompatible"],
+    }),
+    deps = [
+        ":__support_common",
+        ":__support_error_or",
+        ":__support_macros_config",
+        ":__support_osutil_syscall",
+        ":types_socklen_t",
+        ":types_struct_sockaddr",
+    ],
+)
+
+libc_support_library(
+    name = "__support_osutil_linux_syscall_wrappers_accept4",
+    hdrs = ["src/__support/OSUtil/linux/syscall_wrappers/accept4.h"],
+    target_compatible_with = select({
+        "@platforms//os:linux": [],
+        "//conditions:default": ["@platforms//:incompatible"],
+    }),
+    deps = [
+        ":__support_common",
+        ":__support_error_or",
+        ":__support_macros_config",
+        ":__support_osutil_syscall",
+        ":types_socklen_t",
+        ":types_struct_sockaddr",
+    ],
+)
+
+libc_support_library(
+    name = "__support_osutil_linux_syscall_wrappers_connect",
+    hdrs = ["src/__support/OSUtil/linux/syscall_wrappers/connect.h"],
+    target_compatible_with = select({
+        "@platforms//os:linux": [],
+        "//conditions:default": ["@platforms//:incompatible"],
+    }),
+    deps = [
+        ":__support_common",
+        ":__support_error_or",
+        ":__support_macros_config",
+        ":__support_osutil_syscall",
+        ":types_socklen_t",
+        ":types_struct_sockaddr",
+    ],
+)
+
 libc_support_library(
     name = "__support_osutil_linux_syscall_wrappers_mkdir",
     hdrs = ["src/__support/OSUtil/linux/syscall_wrappers/mkdir.h"],
@@ -2709,6 +2775,40 @@ libc_support_library(
     ],
 )
 
+libc_support_library(
+    name = "__support_osutil_linux_syscall_wrappers_getpeername",
+    hdrs = ["src/__support/OSUtil/linux/syscall_wrappers/getpeername.h"],
+    target_compatible_with = select({
+        "@platforms//os:linux": [],
+        "//conditions:default": ["@platforms//:incompatible"],
+    }),
+    deps = [
+        ":__support_common",
+        ":__support_error_or",
+        ":__support_macros_config",
+        ":__support_osutil_syscall",
+        ":types_socklen_t",
+        ":types_struct_sockaddr",
+    ],
+)
+
+libc_support_library(
+    name = "__support_osutil_linux_syscall_wrappers_getsockname",
+    hdrs = ["src/__support/OSUtil/linux/syscall_wrappers/getsockname.h"],
+    target_compatible_with = select({
+        "@platforms//os:linux": [],
+        "//conditions:default": ["@platforms//:incompatible"],
+    }),
+    deps = [
+        ":__support_common",
+        ":__support_error_or",
+        ":__support_macros_config",
+        ":__support_osutil_syscall",
+        ":types_socklen_t",
+        ":types_struct_sockaddr",
+    ],
+)
+
 libc_support_library(
     name = "__support_osutil_linux_syscall_wrappers_getsockopt",
     hdrs = ["src/__support/OSUtil/linux/syscall_wrappers/getsockopt.h"],
@@ -2741,6 +2841,21 @@ libc_support_library(
     ],
 )
 
+libc_support_library(
+    name = "__support_osutil_linux_syscall_wrappers_listen",
+    hdrs = ["src/__support/OSUtil/linux/syscall_wrappers/listen.h"],
+    target_compatible_with = select({
+        "@platforms//os:linux": [],
+        "//conditions:default": ["@platforms//:incompatible"],
+    }),
+    deps = [
+        ":__support_common",
+        ":__support_error_or",
+        ":__support_macros_config",
+        ":__support_osutil_syscall",
+    ],
+)
+
 libc_support_library(
     name = "__support_osutil_linux_syscall_wrappers_recvmmsg",
     hdrs = ["src/__support/OSUtil/linux/syscall_wrappers/recvmmsg.h"],
@@ -16057,6 +16172,102 @@ libc_function(
 
 ############################## sys/socket targets ##############################
 
+libc_function(
+    name = "accept",
+    srcs = ["src/sys/socket/linux/accept.cpp"],
+    hdrs = ["src/sys/socket/accept.h"],
+    deps = [
+        ":__support_common",
+        ":__support_libc_errno",
+        ":__support_macros_config",
+        ":__support_osutil_linux_syscall_wrappers_accept",
+        ":__support_osutil_syscall",
+        ":errno",
+        ":types_socklen_t",
+        ":types_struct_sockaddr",
+    ],
+)
+
+libc_function(
+    name = "accept4",
+    srcs = ["src/sys/socket/linux/accept4.cpp"],
+    hdrs = ["src/sys/socket/accept4.h"],
+    deps = [
+        ":__support_common",
+        ":__support_libc_errno",
+        ":__support_macros_config",
+        ":__support_osutil_linux_syscall_wrappers_accept4",
+        ":__support_osutil_syscall",
+        ":errno",
+        ":types_socklen_t",
+        ":types_struct_sockaddr",
+    ],
+)
+
+libc_function(
+    name = "bind",
+    srcs = ["src/sys/socket/linux/bind.cpp"],
+    hdrs = ["src/sys/socket/bind.h"],
+    deps = [
+        ":__support_common",
+        ":__support_libc_errno",
+        ":__support_macros_config",
+        ":__support_osutil_linux_syscall_wrappers_bind",
+        ":__support_osutil_syscall",
+        ":errno",
+        ":types_socklen_t",
+        ":types_struct_sockaddr",
+    ],
+)
+
+libc_function(
+    name = "connect",
+    srcs = ["src/sys/socket/linux/connect.cpp"],
+    hdrs = ["src/sys/socket/connect.h"],
+    deps = [
+        ":__support_common",
+        ":__support_libc_errno",
+        ":__support_macros_config",
+        ":__support_osutil_linux_syscall_wrappers_connect",
+        ":__support_osutil_syscall",
+        ":errno",
+        ":types_socklen_t",
+        ":types_struct_sockaddr",
+    ],
+)
+
+libc_function(
+    name = "getpeername",
+    srcs = ["src/sys/socket/linux/getpeername.cpp"],
+    hdrs = ["src/sys/socket/getpeername.h"],
+    deps = [
+        ":__support_common",
+        ":__support_libc_errno",
+        ":__support_macros_config",
+        ":__support_osutil_linux_syscall_wrappers_getpeername",
+        ":__support_osutil_syscall",
+        ":errno",
+        ":types_socklen_t",
+        ":types_struct_sockaddr",
+    ],
+)
+
+libc_function(
+    name = "getsockname",
+    srcs = ["src/sys/socket/linux/getsockname.cpp"],
+    hdrs = ["src/sys/socket/getsockname.h"],
+    deps = [
+        ":__support_common",
+        ":__support_libc_errno",
+        ":__support_macros_config",
+        ":__support_osutil_linux_syscall_wrappers_getsockname",
+        ":__support_osutil_syscall",
+        ":errno",
+        ":types_socklen_t",
+        ":types_struct_sockaddr",
+    ],
+)
+
 libc_function(
     name = "getsockopt",
     srcs = ["src/sys/socket/linux/getsockopt.cpp"],
@@ -16072,6 +16283,20 @@ libc_function(
     ],
 )
 
+libc_function(
+    name = "listen",
+    srcs = ["src/sys/socket/linux/listen.cpp"],
+    hdrs = ["src/sys/socket/listen.h"],
+    deps = [
+        ":__support_common",
+        ":__support_libc_errno",
+        ":__support_macros_config",
+        ":__support_osutil_linux_syscall_wrappers_listen",
+        ":__support_osutil_syscall",
+        ":errno",
+    ],
+)
+
 libc_function(
     name = "recv",
     srcs = ["src/sys/socket/linux/recv.cpp"],
@@ -16237,6 +16462,19 @@ libc_function(
     ],
 )
 
+libc_function(
+    name = "sockatmark",
+    srcs = ["src/sys/socket/linux/sockatmark.cpp"],
+    hdrs = ["src/sys/socket/sockatmark.h"],
+    deps = [
+        ":__support_common",
+        ":__support_libc_errno",
+        ":__support_macros_config",
+        ":__support_osutil_linux_syscall_wrappers_ioctl",
+        ":errno",
+    ],
+)
+
 libc_function(
     name = "socket",
     srcs = ["src/sys/socket/linux/socket.cpp"],
diff --git a/utils/bazel/llvm-project-overlay/libc/test/src/sys/socket/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/test/src/sys/socket/BUILD.bazel
index 1452249cefe19..707c438556bcd 100644
--- a/utils/bazel/llvm-project-overlay/libc/test/src/sys/socket/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/test/src/sys/socket/BUILD.bazel
@@ -4,12 +4,93 @@
 
 # Tests for LLVM libc socket.h functions.
 
-load("//libc/test:libc_test_rules.bzl", "libc_test")
+load("//libc/test:libc_test_rules.bzl", "libc_test", "libc_test_library")
 
 package(default_visibility = ["//visibility:public"])
 
 licenses(["notice"])
 
+libc_test_library(
+    name = "socket_test_support",
+    hdrs = ["linux/socket_test_support.h"],
+    deps = [
+        "//libc:__support_common",
+        "//libc:__support_cpp_string_view",
+        "//libc:chdir",
+        "//libc:close",
+        "//libc:fchdir",
+        "//libc:hdr_fcntl_macros",
+        "//libc:hdr_sys_socket_macros",
+        "//libc:open",
+        "//libc:strncpy",
+        "//libc:strnlen",
+        "//libc:types_size_t",
+        "//libc:types_socklen_t",
+        "//libc:types_struct_sockaddr_un",
+    ],
+)
+
+libc_test(
+    name = "bind_test",
+    srcs = ["linux/bind_test.cpp"],
+    deps = [
+        ":socket_test_support",
+        "//libc:__support_cpp_scope",
+        "//libc:bind",
+        "//libc:close",
+        "//libc:getsockname",
+        "//libc:hdr_netinet_in_macros",
+        "//libc:hdr_sys_socket_macros",
+        "//libc:htonl",
+        "//libc:remove",
+        "//libc:socket",
+        "//libc:types_sa_family_t",
+        "//libc:types_struct_sockaddr_in",
+        "//libc:types_struct_sockaddr_in6",
+        "//libc:types_struct_sockaddr_un",
+    ],
+)
+
+libc_test(
+    name = "connect_accept_test",
+    srcs = ["linux/connect_accept_test.cpp"],
+    deps = [
+        ":socket_test_support",
+        "//libc:__support_cpp_scope",
+        "//libc:accept",
+        "//libc:accept4",
+        "//libc:bind",
+        "//libc:close",
+        "//libc:connect",
+        "//libc:fcntl",
+        "//libc:hdr_fcntl_macros",
+        "//libc:hdr_sys_socket_macros",
+        "//libc:listen",
+        "//libc:remove",
+        "//libc:socket",
+        "//libc:types_sa_family_t",
+        "//libc:types_size_t",
+        "//libc:types_socklen_t",
+        "//libc:types_struct_sockaddr_un",
+    ],
+)
+
+libc_test(
+    name = "listen_test",
+    srcs = ["linux/listen_test.cpp"],
+    deps = [
+        ":socket_test_support",
+        "//libc:__support_cpp_scope",
+        "//libc:bind",
+        "//libc:close",
+        "//libc:hdr_sys_socket_macros",
+        "//libc:listen",
+        "//libc:remove",
+        "//libc:socket",
+        "//libc:types_struct_sockaddr_un",
+    ],
+)
+
 libc_test(
     name = "send_recv_test",
     srcs = ["linux/send_recv_test.cpp"],
@@ -134,6 +215,19 @@ libc_test(
     ],
 )
 
+libc_test(
+    name = "sockatmark_test",
+    srcs = ["linux/sockatmark_test.cpp"],
+    deps = [
+        "//libc:__support_cpp_scope",
+        "//libc:close",
+        "//libc:hdr_sys_socket_macros",
+        "//libc:pipe",
+        "//libc:sockatmark",
+        "//libc:socketpair",
+    ],
+)
+
 libc_test(
     name = "socketpair_test",
     srcs = ["linux/socketpair_test.cpp"],
@@ -144,3 +238,25 @@ libc_test(
         "//libc:socketpair",
     ],
 )
+
+libc_test(
+    name = "sockname_test",
+    srcs = ["linux/sockname_test.cpp"],
+    deps = [
+        ":socket_test_support",
+        "//libc:__support_cpp_scope",
+        "//libc:accept",
+        "//libc:bind",
+        "//libc:close",
+        "//libc:connect",
+        "//libc:getpeername",
+        "//libc:getsockname",
+        "//libc:hdr_sys_socket_macros",
+        "//libc:listen",
+        "//libc:remove",
+        "//libc:socket",
+        "//libc:types_sa_family_t",
+        "//libc:types_socklen_t",
+        "//libc:types_struct_sockaddr_un",
+    ],
+)



More information about the libc-commits mailing list