diff --git a/mod.zig b/mod.zig index 7d6123d47504edc009b3119f241f86f21bc17f2c..ded360834ac9deb8aca76afe7abccfad11ec4735 100644 --- a/mod.zig +++ b/mod.zig @@ -1478,6 +1478,10 @@ pub const libc = struct { /// https://pubs.opengroup.org/onlinepubs/9699919799.orig/functions/fsync.html pub extern fn fsync(fd: c_int) c_int; + /// int getaddrinfo(const char *restrict nodename, const char *restrict servname, const struct addrinfo *restrict hints, struct addrinfo **restrict res); + /// https://pubs.opengroup.org/onlinepubs/9699919799.orig/functions/getaddrinfo.html + pub extern fn getaddrinfo(noalias nodename: ?[*:0]const u8, noalias servname: ?[*:0]const u8, noalias req: ?*const struct_addrinfo, noalias pai: **const struct_addrinfo) c_int; + /// int getchar(void); /// https://pubs.opengroup.org/onlinepubs/9699919799.orig/functions/getchar.html pub extern fn getchar() c_int; @@ -3089,3 +3093,11 @@ pub fn recv(socketfd: c_uint, buffer: []u8, flags: c_int) errno.Error!usize { std.debug.assert(rc >= 0); return @intCast(rc); } +pub fn getaddrinfo(noalias nodename: ?[*:0]const u8, noalias servname: ?[*:0]const u8, noalias req: ?*const struct_addrinfo) eai.Error!*const struct_addrinfo { + var pai: *const struct_addrinfo = undefined; + var hints = std.mem.zeroes(struct_addrinfo); + const rc = libc.getaddrinfo(nodename, servname, req orelse &hints, &pai); + if (rc < 0) return eai.fromInt(rc); + std.debug.assert(rc == 0); + return pai; +} diff --git a/test.zig b/test.zig index f5b48654d9a588840b5d0545b0d689f278823af5..757da0749fdf6de4280a8bb52a6cc672ade4e57a 100644 --- a/test.zig +++ b/test.zig @@ -25,4 +25,5 @@ test { _ = &linux.accept4; _ = &linux.send; _ = &linux.recv; + _ = &linux.getaddrinfo; }