diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Client.zig | 3 | ||||
| -rw-r--r-- | src/RawSocket.zig | 10 | ||||
| -rw-r--r-- | src/main.zig | 9 |
3 files changed, 10 insertions, 12 deletions
diff --git a/src/Client.zig b/src/Client.zig index e68ef4b..ae9ca66 100644 --- a/src/Client.zig +++ b/src/Client.zig @@ -113,10 +113,9 @@ pub fn connect(self: Client, io: Io, payload: []const u8) !SaprusConnection { try self.socket.send(full_msg); var res_buf: [4096]u8 = undefined; - // Ignore response from sentinel, just accept that we got one. log.debug("Awaiting handshake response", .{}); + // Ignore response from sentinel, just accept that we got one. _ = try self.socket.receive(&res_buf); - try io.sleep(.fromMilliseconds(40), .real); headers.udp.dst_port = udp_dest_port; headers.ip.id = rand.int(u16); diff --git a/src/RawSocket.zig b/src/RawSocket.zig index f790e4e..71b4e1c 100644 --- a/src/RawSocket.zig +++ b/src/RawSocket.zig @@ -72,10 +72,6 @@ pub fn init() !RawSocket { const bind_ret = std.os.linux.bind(socket, @ptrCast(&sockaddr_ll), @sizeOf(@TypeOf(sockaddr_ll))); if (bind_ret != 0) return error.BindError; - const timeout: std.os.linux.timeval = .{ .sec = 60 * if (is_debug) 1 else 10, .usec = 0 }; - const timeout_ret = std.os.linux.setsockopt(socket, std.os.linux.SOL.SOCKET, std.os.linux.SO.RCVTIMEO, @ptrCast(&timeout), @sizeOf(@TypeOf(timeout))); - if (timeout_ret != 0) return error.SetTimeoutError; - return .{ .fd = socket, .sockaddr_ll = sockaddr_ll, @@ -83,6 +79,12 @@ pub fn init() !RawSocket { }; } +pub fn setTimeout(self: *RawSocket, sec: isize, usec: i64) !void { + const timeout: std.os.linux.timeval = .{ .sec = sec, .usec = usec }; + const timeout_ret = std.os.linux.setsockopt(self.fd, std.os.linux.SOL.SOCKET, std.os.linux.SO.RCVTIMEO, @ptrCast(&timeout), @sizeOf(@TypeOf(timeout))); + if (timeout_ret != 0) return error.SetTimeoutError; +} + pub fn deinit(self: *RawSocket) void { _ = std.os.linux.close(self.fd); self.* = undefined; diff --git a/src/main.zig b/src/main.zig index 708ad18..439dc93 100644 --- a/src/main.zig +++ b/src/main.zig @@ -127,8 +127,6 @@ pub fn main(init: std.process.Init) !void { return; } - var retry_seconds: u16 = 12 * if (is_debug) 1 else 10; - var init_con_buf: [SaprusClient.max_payload_len]u8 = undefined; var w: Writer = .fixed(&init_con_buf); try w.print("{b64}", .{flags.connect.?}); @@ -139,19 +137,18 @@ pub fn main(init: std.process.Init) !void { defer client.deinit(); log.debug("Starting connection", .{}); + try client.socket.setTimeout(if (is_debug) 3 else 25, 0); var connection = client.connect(init.io, w.buffered()) catch { - try init.io.sleep(.fromSeconds(retry_seconds), .boot); + log.debug("Connection timed out", .{}); continue; }; - retry_seconds = 60 * if (is_debug) 1 else 10; - log.debug("Connection started", .{}); next_message: while (true) { var res_buf: [2048]u8 = undefined; + try client.socket.setTimeout(if (is_debug) 60 else 600, 0); const next = connection.next(init.io, &res_buf) catch { - try init.io.sleep(.fromSeconds(retry_seconds), .boot); continue :reconnect; }; |
