diff --git a/mod.zig b/mod.zig index bdb9ec0a0508c1ba4c5947730a625f407a9a8dfd..f12d6009dee50c662b4d8deb68169790c87b8b71 100644 --- a/mod.zig +++ b/mod.zig @@ -1598,6 +1598,10 @@ pub const libc = struct { /// https://pubs.opengroup.org/onlinepubs/9699919799.orig/functions/getsid.html pub extern fn getsid(pid: pid_t) pid_t; + /// int getsockname(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len); + /// https://pubs.opengroup.org/onlinepubs/9699919799.orig/functions/getsockname.html + pub extern fn getsockname(fd: c_int, noalias addr: *struct_sockaddr, noalias len: *socklen_t) c_int; + /// uid_t getuid(void); /// https://pubs.opengroup.org/onlinepubs/9699919799.orig/functions/getuid.html pub extern fn getuid() uid_t; @@ -3167,3 +3171,8 @@ pub fn writev(fd: c_int, iovec: []const struct_iovec) !usize { std.debug.assert(rc >= 0); return @intCast(rc); } +pub fn getsockname(socketfd: c_uint, noalias address: *struct_sockaddr, noalias address_len: *socklen_t) errno.Error!void { + const rc = libc.getsockname(@intCast(socketfd), address, address_len); + if (rc == -1) return errno.fromInt(errno.fromLibC()); + std.debug.assert(rc == 0); +} diff --git a/test.zig b/test.zig index 9c748abb6eea4fd26ff79649d88b64c82eb0ee5c..372197947cee352306b05b6da0fca01288a89346 100644 --- a/test.zig +++ b/test.zig @@ -32,4 +32,5 @@ test { _ = &linux.readlinkat; _ = &linux.write; _ = &linux.writev; + _ = &linux.getsockname; }