diff options
Diffstat (limited to 'src/saprus.zig')
-rw-r--r-- | src/saprus.zig | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/saprus.zig b/src/saprus.zig index 9d676c1..b8a5ea4 100644 --- a/src/saprus.zig +++ b/src/saprus.zig @@ -14,7 +14,7 @@ pub fn deinit() void { network.deinit(); } -fn broadcastSaprusMessage(msg: SaprusMessage, allocator: Allocator) !void { +fn broadcastSaprusMessage(msg: SaprusMessage, udp_port: u16, allocator: Allocator) !void { const msg_bytes = try msg.toBytes(allocator); defer allocator.free(msg_bytes); @@ -31,7 +31,7 @@ fn broadcastSaprusMessage(msg: SaprusMessage, allocator: Allocator) !void { const dest_addr = network.EndPoint{ .address = network.Address{ .ipv4 = network.Address.IPv4.broadcast }, - .port = 8888, + .port = udp_port, }; try sock.bind(bind_addr); @@ -47,15 +47,20 @@ pub fn sendRelay(payload: []const u8, allocator: Allocator) !void { }, }; - try broadcastSaprusMessage(msg, allocator); + try broadcastSaprusMessage(msg, 8888, allocator); } -pub fn sendInitialConnection(payload: []const u8, initial_port: u16, allocator: Allocator) !SaprusMessage { - var dest_port: u16 = 0; +fn randomPort() u16 { + var p: u16 = 0; if (rand) |r| { - dest_port = r.intRangeAtMost(u16, 1024, 65000); + p = r.intRangeAtMost(u16, 1024, 65000); } else unreachable; + return p; +} + +pub fn sendInitialConnection(payload: []const u8, initial_port: u16, allocator: Allocator) !SaprusMessage { + const dest_port = randomPort(); const msg = SaprusMessage{ .connection = .{ .header = .{ @@ -69,7 +74,7 @@ pub fn sendInitialConnection(payload: []const u8, initial_port: u16, allocator: }, }; - try broadcastSaprusMessage(msg, allocator); + try broadcastSaprusMessage(msg, 8888, allocator); return msg; } @@ -90,7 +95,8 @@ fn awaitSentinelConnectionResponse( .port = 8888, }; - try sock.setReadTimeout(1000); + // timeout 1s + try sock.setReadTimeout(1_000_000); try sock.bind(bind_addr); // Signal that the socket is ready to receive data. @@ -128,7 +134,7 @@ pub fn connect(payload: []const u8, allocator: Allocator) !?SaprusMessage { ); // Block until the socket is set up. - try setting_up_socket.timedWait(500 * 1000 * 1000 * 1000); + try setting_up_socket.timedWait(5 * 1000 * 1000 * 1000 * 1000); const msg = try sendInitialConnection(payload, initial_port, allocator); @@ -136,7 +142,7 @@ pub fn connect(payload: []const u8, allocator: Allocator) !?SaprusMessage { response_thread.join(); // Complete handshake after awaiting response - try broadcastSaprusMessage(msg, allocator); + try broadcastSaprusMessage(msg, randomPort(), allocator); return initial_conn_res; } |