summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/NetWriter.zig25
-rw-r--r--src/main.zig4
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".*;
}