[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