diff options
| author | Robby Zambito <contact@robbyzambito.me> | 2026-01-10 21:17:23 -0500 |
|---|---|---|
| committer | Robby Zambito <contact@robbyzambito.me> | 2026-01-10 21:17:46 -0500 |
| commit | 7a8874ea6ac846eea3bdc35be2f46501877df87c (patch) | |
| tree | 3f259da95da855c94c06679eb08b8279e4636b16 /src | |
| parent | b39603522f3bc131902de8e97059b65521214b16 (diff) | |
doing some shenanigans
trying to start writing my own function to do raw socket connections
Diffstat (limited to 'src')
| -rw-r--r-- | src/NetWriter.zig | 25 | ||||
| -rw-r--r-- | src/main.zig | 4 |
2 files changed, 27 insertions, 2 deletions
diff --git a/src/NetWriter.zig b/src/NetWriter.zig index 9f06823..f0f617d 100644 --- a/src/NetWriter.zig +++ b/src/NetWriter.zig @@ -211,3 +211,28 @@ const Writer = std.Io.Writer; const mem = std.mem; const NetWriter = @This(); + +const saprusOptions: std.Io.net.BindOptions = .{ + .mode = .raw, + .protocol = 0, +}; + +fn netSaprusBindIpPosix( + userdata: ?*anyopaque, + address: *const IpAddress, + options: IpAddress.BindOptions, +) IpAddress.BindError!net.Socket { + if (!have_networking) return error.NetworkDown; + const t: *Threaded = @ptrCast(@alignCast(userdata)); + const family = std.os.linux.PF.PACKET; + const socket_fd = try openSocketPosix(t, family, options); + errdefer posix.close(socket_fd); + var storage: PosixAddress = undefined; + var addr_len = addressToPosix(address, &storage); + try posixBind(t, socket_fd, &storage.any, addr_len); + try posixGetSockName(t, socket_fd, &storage.any, &addr_len); + return .{ + .handle = socket_fd, + .address = addressFromPosix(&storage), + }; +} diff --git a/src/main.zig b/src/main.zig index 5fb9cce..20aaa3b 100644 --- a/src/main.zig +++ b/src/main.zig @@ -82,8 +82,8 @@ fn parseDest(in: ?[]const u8) [4]u8 { return res; } - const addr = std.net.Ip4Address.parse(dest, 0) catch return "FAIL".*; - return @bitCast(addr.sa.addr); + const addr = std.Io.net.Ip4Address.parse(dest, 0) catch return "FAIL".*; + return addr.bytes; } return "zap\x00".*; } |
