commit 02c260dd06988f6acd8a1cbfbacb306d9c367ced (tree)
parent 1b43f27a91cfa2722e256f561b7e08f163913933
Author: Andrew Kelley <andrew@ziglang.org>
Date: Wed, 7 Jan 2026 14:45:09 -0800
goodbye posix.getsockname
see #6600
Diffstat:
2 files changed, 11 insertions(+), 33 deletions(-)
diff --git a/lib/std/os/linux/IoUring/test.zig b/lib/std/os/linux/IoUring/test.zig
@@ -537,7 +537,7 @@ test "sendmsg/recvmsg" {
// set address_server to the OS-chosen IP/port.
var slen: posix.socklen_t = @sizeOf(linux.sockaddr.in);
- try posix.getsockname(server, addrAny(&address_server), &slen);
+ try getsockname(server, addrAny(&address_server), &slen);
const client = try socket(address_server.family, posix.SOCK.DGRAM, 0);
defer posix.close(client);
@@ -1041,7 +1041,7 @@ test "shutdown" {
// set address to the OS-chosen IP/port.
var slen: posix.socklen_t = @sizeOf(linux.sockaddr.in);
- try posix.getsockname(server, addrAny(&address), &slen);
+ try getsockname(server, addrAny(&address), &slen);
const shutdown_sqe = try ring.shutdown(0x445445445, server, linux.SHUT.RD);
try testing.expectEqual(linux.IORING_OP.SHUTDOWN, shutdown_sqe.opcode);
@@ -2462,7 +2462,7 @@ test "bind/listen/connect" {
// Read system assigned port into addr
var addr_len: posix.socklen_t = @sizeOf(linux.sockaddr.in);
- try posix.getsockname(listen_fd, addrAny(&addr), &addr_len);
+ try getsockname(listen_fd, addrAny(&addr), &addr_len);
break :brk listen_fd;
};
@@ -2666,7 +2666,7 @@ fn createListenerSocket(address: *linux.sockaddr.in) !posix.socket_t {
// set address to the OS-chosen IP/port.
var slen: posix.socklen_t = @sizeOf(linux.sockaddr.in);
- try posix.getsockname(listener_socket, addrAny(address), &slen);
+ try getsockname(listener_socket, addrAny(address), &slen);
return listener_socket;
}
@@ -2717,3 +2717,10 @@ fn listen(sock: posix.socket_t, backlog: u31) !void {
else => return error.ListenFailure,
}
}
+
+fn getsockname(sock: posix.socket_t, addr: *posix.sockaddr, addrlen: *posix.socklen_t) !void {
+ switch (posix.errno(posix.system.getsockname(sock, addr, addrlen))) {
+ .SUCCESS => return,
+ else => return error.GetSockNameFailure,
+ }
+}
diff --git a/lib/std/posix.zig b/lib/std/posix.zig
@@ -710,35 +710,6 @@ pub const GetSockNameError = error{
FileDescriptorNotASocket,
} || UnexpectedError;
-pub fn getsockname(sock: socket_t, addr: *sockaddr, addrlen: *socklen_t) GetSockNameError!void {
- if (native_os == .windows) {
- const rc = windows.getsockname(sock, addr, addrlen);
- if (rc == windows.ws2_32.SOCKET_ERROR) {
- switch (windows.ws2_32.WSAGetLastError()) {
- .NOTINITIALISED => unreachable,
- .ENETDOWN => return error.NetworkDown,
- .EFAULT => unreachable, // addr or addrlen have invalid pointers or addrlen points to an incorrect value
- .ENOTSOCK => return error.FileDescriptorNotASocket,
- .EINVAL => return error.SocketNotBound,
- else => |err| return windows.unexpectedWSAError(err),
- }
- }
- return;
- } else {
- const rc = system.getsockname(sock, addr, addrlen);
- switch (errno(rc)) {
- .SUCCESS => return,
- else => |err| return unexpectedErrno(err),
-
- .BADF => unreachable, // always a race condition
- .FAULT => unreachable,
- .INVAL => unreachable, // invalid parameters
- .NOTSOCK => return error.FileDescriptorNotASocket,
- .NOBUFS => return error.SystemResources,
- }
- }
-}
-
pub fn getpeername(sock: socket_t, addr: *sockaddr, addrlen: *socklen_t) GetSockNameError!void {
if (native_os == .windows) {
const rc = windows.getpeername(sock, addr, addrlen);