goodbye posix.getsockname

see #6600
This commit is contained in:
Andrew Kelley 2026-01-07 14:45:09 -08:00
parent 1b43f27a91
commit 02c260dd06
2 changed files with 11 additions and 33 deletions

View file

@ -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,
}
}

View file

@ -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);