| ... | @@ -2,6 +2,7 @@ const std = @import("std"); | ... | @@ -2,6 +2,7 @@ const std = @import("std"); |
| 2 | const builtin = @import("builtin"); | 2 | const builtin = @import("builtin"); |
| 3 | const nio = @import("nio"); | 3 | const nio = @import("nio"); |
| 4 | const nfs = @import("nfs"); | 4 | const nfs = @import("nfs"); |
| | 5 | const time = @import("time"); |
| 5 | const sys_linux = @import("sys-linux"); | 6 | const sys_linux = @import("sys-linux"); |
| 6 | | 7 | |
| 7 | const os = builtin.target.os.tag; | 8 | const os = builtin.target.os.tag; |
| ... | @@ -188,6 +189,22 @@ pub const Stream = struct { | ... | @@ -188,6 +189,22 @@ pub const Stream = struct { |
| 188 | .state = @ptrFromInt(@intFromEnum(s.socket)), | 189 | .state = @ptrFromInt(@intFromEnum(s.socket)), |
| 189 | }; | 190 | }; |
| 190 | } | 191 | } |
| | 192 | |
| | 193 | pub fn setSendTimeout(s: Stream, timeout_us: u31) !void { |
| | 194 | const timeval: sys.struct_timeval = .{ |
| | 195 | .sec = timeout_us / time.us_per_s, |
| | 196 | .usec = timeout_us % time.us_per_s, |
| | 197 | }; |
| | 198 | return sys.setsockopt(@intCast(@intFromEnum(s.socket)), sys.SOL.SOCKET, sys.SO.SNDTIMEO, @ptrCast((&timeval)[0..1])); |
| | 199 | } |
| | 200 | |
| | 201 | pub fn setRecvTimeout(s: Stream, timeout_us: u31) !void { |
| | 202 | const timeval: sys.struct_timeval = .{ |
| | 203 | .sec = timeout_us / time.us_per_s, |
| | 204 | .usec = timeout_us % time.us_per_s, |
| | 205 | }; |
| | 206 | return sys.setsockopt(@intCast(@intFromEnum(s.socket)), sys.SOL.SOCKET, sys.SO.RCVTIMEO, @ptrCast((&timeval)[0..1])); |
| | 207 | } |
| 191 | }; | 208 | }; |
| 192 | | 209 | |
| 193 | pub const Server = struct { | 210 | pub const Server = struct { |