diff --git a/AnyWritable.zig b/AnyWritable.zig index 0ffd3d97ccc19aa732368aff013253b2af593488..ede853a09f85d497a6c2b7e122015a11f087412b 100644 --- a/AnyWritable.zig +++ b/AnyWritable.zig @@ -1,4 +1,11 @@ const std = @import("std"); +const builtin = @import("builtin"); +const sys_linux = @import("sys-linux"); + +const sys = switch (builtin.target.os.tag) { + .linux => sys_linux, + else => unreachable, +}; const nio = @import("./nio.zig"); const AnyWritable = @This(); @@ -13,6 +20,15 @@ pub usingnamespace nio.Writable(@This(), ._const); pub fn write(r: AnyWritable, buffer: []const u8) !usize { return r.vtable.write(r.state, buffer); } +pub fn writev(w: AnyWritable, iovec: []const sys.struct_iovec) WriteError!usize { + var total: usize = 0; + for (iovec) |vec| { + const len = try write(w, vec.base[0..vec.len]); + total += len; + if (len != vec.len) break; + } + return total; +} pub fn anyWritable(r: AnyWritable) AnyWritable { return r; }