diff options
Diffstat (limited to 'src/NetWriter.zig')
| -rw-r--r-- | src/NetWriter.zig | 25 |
1 files changed, 25 insertions, 0 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), + }; +} |
