mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
Io.net: use resolve for IPv6
/etc/resolv.conf might have IPv6 addresses with scope in it, so this is needed.
This commit is contained in:
parent
d776a6bbbe
commit
e7c9df9fb0
4 changed files with 13 additions and 10 deletions
|
|
@ -668,7 +668,7 @@ pub const VTable = struct {
|
|||
netRead: *const fn (?*anyopaque, src: net.Stream, data: [][]u8) net.Stream.Reader.Error!usize,
|
||||
netWrite: *const fn (?*anyopaque, dest: net.Stream, header: []const u8, data: []const []const u8, splat: usize) net.Stream.Writer.Error!usize,
|
||||
netClose: *const fn (?*anyopaque, stream: net.Stream) void,
|
||||
netInterfaceNameResolve: *const fn (?*anyopaque, net.Interface.Name) net.Interface.Name.ResolveError!net.Interface,
|
||||
netInterfaceNameResolve: *const fn (?*anyopaque, *const net.Interface.Name) net.Interface.Name.ResolveError!net.Interface,
|
||||
netInterfaceName: *const fn (?*anyopaque, net.Interface) net.Interface.NameError!net.Interface.Name,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1124,7 +1124,10 @@ fn netClose(userdata: ?*anyopaque, stream: Io.net.Stream) void {
|
|||
return net_stream.close();
|
||||
}
|
||||
|
||||
fn netInterfaceNameResolve(userdata: ?*anyopaque, name: Io.net.Interface.Name) Io.net.Interface.Name.ResolveError!Io.net.Interface {
|
||||
fn netInterfaceNameResolve(
|
||||
userdata: ?*anyopaque,
|
||||
name: *const Io.net.Interface.Name,
|
||||
) Io.net.Interface.Name.ResolveError!Io.net.Interface {
|
||||
const pool: *Pool = @ptrCast(@alignCast(userdata));
|
||||
try pool.checkCancel();
|
||||
|
||||
|
|
|
|||
|
|
@ -538,7 +538,7 @@ pub const Interface = struct {
|
|||
} || Io.UnexpectedError || Io.Cancelable;
|
||||
|
||||
/// Corresponds to "if_nametoindex" in libc.
|
||||
pub fn resolve(n: []const u8, io: Io) ResolveError!Interface {
|
||||
pub fn resolve(n: *const Name, io: Io) ResolveError!Interface {
|
||||
return io.vtable.netInterfaceNameResolve(io.userdata, n);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -542,7 +542,7 @@ pub const ResolvConf = struct {
|
|||
error.NotDir,
|
||||
error.AccessDenied,
|
||||
=> {
|
||||
try addNumeric(&rc, "127.0.0.1", 53);
|
||||
try addNumeric(&rc, io, "127.0.0.1", 53);
|
||||
return rc;
|
||||
},
|
||||
|
||||
|
|
@ -552,7 +552,7 @@ pub const ResolvConf = struct {
|
|||
|
||||
var line_buf: [512]u8 = undefined;
|
||||
var file_reader = file.reader(io, &line_buf);
|
||||
parse(&rc, &file_reader.interface) catch |err| switch (err) {
|
||||
parse(&rc, io, &file_reader.interface) catch |err| switch (err) {
|
||||
error.ReadFailed => return file_reader.err.?,
|
||||
else => |e| return e,
|
||||
};
|
||||
|
|
@ -562,7 +562,7 @@ pub const ResolvConf = struct {
|
|||
const Directive = enum { options, nameserver, domain, search };
|
||||
const Option = enum { ndots, attempts, timeout };
|
||||
|
||||
fn parse(rc: *ResolvConf, reader: *Io.Reader) !void {
|
||||
fn parse(rc: *ResolvConf, io: Io, reader: *Io.Reader) !void {
|
||||
while (reader.takeSentinel('\n')) |line_with_comment| {
|
||||
const line = line: {
|
||||
var split = std.mem.splitScalar(u8, line_with_comment, '#');
|
||||
|
|
@ -588,7 +588,7 @@ pub const ResolvConf = struct {
|
|||
},
|
||||
.nameserver => {
|
||||
const ip_txt = line_it.next() orelse continue;
|
||||
try addNumeric(rc, ip_txt, 53);
|
||||
try addNumeric(rc, io, ip_txt, 53);
|
||||
},
|
||||
.domain, .search => {
|
||||
const rest = line_it.rest();
|
||||
|
|
@ -602,13 +602,13 @@ pub const ResolvConf = struct {
|
|||
}
|
||||
|
||||
if (rc.nameservers_len == 0) {
|
||||
try addNumeric(rc, "127.0.0.1", 53);
|
||||
try addNumeric(rc, io, "127.0.0.1", 53);
|
||||
}
|
||||
}
|
||||
|
||||
fn addNumeric(rc: *ResolvConf, name: []const u8, port: u16) !void {
|
||||
fn addNumeric(rc: *ResolvConf, io: Io, name: []const u8, port: u16) !void {
|
||||
assert(rc.nameservers_len < rc.nameservers_buffer.len);
|
||||
rc.nameservers_buffer[rc.nameservers_len] = try .parse(name, port);
|
||||
rc.nameservers_buffer[rc.nameservers_len] = try .resolve(io, name, port);
|
||||
rc.nameservers_len += 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue