mirror of
https://github.com/ziglang/zig.git
synced 2025-12-23 22:53:06 +00:00
Resolve scope IDs using IPv6 sockets
On certain systems (Solaris), resolving the scope id from an interface name can only be done on AF_INET-domain sockets. While we're here, simplify the test while we're here, since there's only one address. Also note that the loopback interface name is not stable across OSs. BSDs and Solaris use `lo0` whilst Linux uses `l0`.
This commit is contained in:
parent
1e7009a9d9
commit
a032fd01e8
@ -27,7 +27,7 @@ pub fn resolveScopeId(name: []const u8) !u32 {
|
||||
return rc;
|
||||
}
|
||||
|
||||
const fd = try os.socket(os.AF.UNIX, os.SOCK.DGRAM, 0);
|
||||
const fd = try os.socket(os.AF.INET, os.SOCK.DGRAM, 0);
|
||||
defer os.closeSocket(fd);
|
||||
|
||||
var f: os.ifreq = undefined;
|
||||
@ -566,21 +566,17 @@ test "ipv6: parse & format" {
|
||||
|
||||
test "ipv6: parse & format addresses with scope ids" {
|
||||
if (!have_ifnamesize) return error.SkipZigTest;
|
||||
const iface = if (native_os.tag == .linux)
|
||||
"lo"
|
||||
else
|
||||
"lo0";
|
||||
const input = "FF01::FB%" ++ iface;
|
||||
const output = "ff01::fb%1";
|
||||
|
||||
const inputs = [_][]const u8{
|
||||
"FF01::FB%lo",
|
||||
const parsed = IPv6.parse(input) catch |err| switch (err) {
|
||||
error.InterfaceNotFound => return,
|
||||
else => return err,
|
||||
};
|
||||
|
||||
const outputs = [_][]const u8{
|
||||
"ff01::fb%1",
|
||||
};
|
||||
|
||||
for (inputs) |input, i| {
|
||||
const parsed = IPv6.parse(input) catch |err| switch (err) {
|
||||
error.InterfaceNotFound => continue,
|
||||
else => return err,
|
||||
};
|
||||
|
||||
try testing.expectFmt(outputs[i], "{}", .{parsed});
|
||||
}
|
||||
try testing.expectFmt(output, "{}", .{parsed});
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user