authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-07 14:45:09-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-07 17:33:07-08:00
log02c260dd06988f6acd8a1cbfbacb306d9c367ced
tree84fa85938e81aff0eaa9af9fc4cd99e59ecece40
parent1b43f27a91cfa2722e256f561b7e08f163913933

goodbye posix.getsockname

see #6600

2 files changed, 11 insertions(+), 33 deletions(-)

lib/std/os/linux/IoUring/test.zig+11-4
...@@ -537,7 +537,7 @@ test "sendmsg/recvmsg" {...@@ -537,7 +537,7 @@ test "sendmsg/recvmsg" {
537537
538 // set address_server to the OS-chosen IP/port.538 // set address_server to the OS-chosen IP/port.
539 var slen: posix.socklen_t = @sizeOf(linux.sockaddr.in);539 var slen: posix.socklen_t = @sizeOf(linux.sockaddr.in);
540 try posix.getsockname(server, addrAny(&address_server), &slen);540 try getsockname(server, addrAny(&address_server), &slen);
541541
542 const client = try socket(address_server.family, posix.SOCK.DGRAM, 0);542 const client = try socket(address_server.family, posix.SOCK.DGRAM, 0);
543 defer posix.close(client);543 defer posix.close(client);
...@@ -1041,7 +1041,7 @@ test "shutdown" {...@@ -1041,7 +1041,7 @@ test "shutdown" {
10411041
1042 // set address to the OS-chosen IP/port.1042 // set address to the OS-chosen IP/port.
1043 var slen: posix.socklen_t = @sizeOf(linux.sockaddr.in);1043 var slen: posix.socklen_t = @sizeOf(linux.sockaddr.in);
1044 try posix.getsockname(server, addrAny(&address), &slen);1044 try getsockname(server, addrAny(&address), &slen);
10451045
1046 const shutdown_sqe = try ring.shutdown(0x445445445, server, linux.SHUT.RD);1046 const shutdown_sqe = try ring.shutdown(0x445445445, server, linux.SHUT.RD);
1047 try testing.expectEqual(linux.IORING_OP.SHUTDOWN, shutdown_sqe.opcode);1047 try testing.expectEqual(linux.IORING_OP.SHUTDOWN, shutdown_sqe.opcode);
...@@ -2462,7 +2462,7 @@ test "bind/listen/connect" {...@@ -2462,7 +2462,7 @@ test "bind/listen/connect" {
24622462
2463 // Read system assigned port into addr2463 // Read system assigned port into addr
2464 var addr_len: posix.socklen_t = @sizeOf(linux.sockaddr.in);2464 var addr_len: posix.socklen_t = @sizeOf(linux.sockaddr.in);
2465 try posix.getsockname(listen_fd, addrAny(&addr), &addr_len);2465 try getsockname(listen_fd, addrAny(&addr), &addr_len);
24662466
2467 break :brk listen_fd;2467 break :brk listen_fd;
2468 };2468 };
...@@ -2666,7 +2666,7 @@ fn createListenerSocket(address: *linux.sockaddr.in) !posix.socket_t {...@@ -2666,7 +2666,7 @@ fn createListenerSocket(address: *linux.sockaddr.in) !posix.socket_t {
26662666
2667 // set address to the OS-chosen IP/port.2667 // set address to the OS-chosen IP/port.
2668 var slen: posix.socklen_t = @sizeOf(linux.sockaddr.in);2668 var slen: posix.socklen_t = @sizeOf(linux.sockaddr.in);
2669 try posix.getsockname(listener_socket, addrAny(address), &slen);2669 try getsockname(listener_socket, addrAny(address), &slen);
26702670
2671 return listener_socket;2671 return listener_socket;
2672}2672}
...@@ -2717,3 +2717,10 @@ fn listen(sock: posix.socket_t, backlog: u31) !void {...@@ -2717,3 +2717,10 @@ fn listen(sock: posix.socket_t, backlog: u31) !void {
2717 else => return error.ListenFailure,2717 else => return error.ListenFailure,
2718 }2718 }
2719}2719}
2720
2721fn getsockname(sock: posix.socket_t, addr: *posix.sockaddr, addrlen: *posix.socklen_t) !void {
2722 switch (posix.errno(posix.system.getsockname(sock, addr, addrlen))) {
2723 .SUCCESS => return,
2724 else => return error.GetSockNameFailure,
2725 }
2726}
lib/std/posix.zig-29
...@@ -710,35 +710,6 @@ pub const GetSockNameError = error{...@@ -710,35 +710,6 @@ pub const GetSockNameError = error{
710 FileDescriptorNotASocket,710 FileDescriptorNotASocket,
711} || UnexpectedError;711} || UnexpectedError;
712712
713pub fn getsockname(sock: socket_t, addr: *sockaddr, addrlen: *socklen_t) GetSockNameError!void {
714 if (native_os == .windows) {
715 const rc = windows.getsockname(sock, addr, addrlen);
716 if (rc == windows.ws2_32.SOCKET_ERROR) {
717 switch (windows.ws2_32.WSAGetLastError()) {
718 .NOTINITIALISED => unreachable,
719 .ENETDOWN => return error.NetworkDown,
720 .EFAULT => unreachable, // addr or addrlen have invalid pointers or addrlen points to an incorrect value
721 .ENOTSOCK => return error.FileDescriptorNotASocket,
722 .EINVAL => return error.SocketNotBound,
723 else => |err| return windows.unexpectedWSAError(err),
724 }
725 }
726 return;
727 } else {
728 const rc = system.getsockname(sock, addr, addrlen);
729 switch (errno(rc)) {
730 .SUCCESS => return,
731 else => |err| return unexpectedErrno(err),
732
733 .BADF => unreachable, // always a race condition
734 .FAULT => unreachable,
735 .INVAL => unreachable, // invalid parameters
736 .NOTSOCK => return error.FileDescriptorNotASocket,
737 .NOBUFS => return error.SystemResources,
738 }
739 }
740}
741
742pub fn getpeername(sock: socket_t, addr: *sockaddr, addrlen: *socklen_t) GetSockNameError!void {713pub fn getpeername(sock: socket_t, addr: *sockaddr, addrlen: *socklen_t) GetSockNameError!void {
743 if (native_os == .windows) {714 if (native_os == .windows) {
744 const rc = windows.getpeername(sock, addr, addrlen);715 const rc = windows.getpeername(sock, addr, addrlen);