mirror of
https://github.com/ziglang/zig.git
synced 2026-01-20 14:25:16 +00:00
Fix typo and add if_nametoindex
This commit is contained in:
parent
9c200035f3
commit
f02f4c0880
@ -75,6 +75,8 @@ pub const Address = extern union {
|
||||
}
|
||||
}
|
||||
|
||||
/// Parse a given IPv6 address string into an Address.
|
||||
/// Assumes the Scope ID of the address is fully numeric.
|
||||
pub fn parseIp6(buf: []const u8, port: u16) !Address {
|
||||
var result = Address{
|
||||
.in6 = os.sockaddr_in6{
|
||||
@ -274,7 +276,7 @@ pub const Address = extern union {
|
||||
const resolved_scope_id = std.fmt.parseInt(u32, scope_id_value, 10) catch |err| blk: {
|
||||
if (err != err.InvalidCharacter) return err;
|
||||
break :blk if_nametoindex(scope_id_value);
|
||||
}
|
||||
};
|
||||
|
||||
result.in6.scope_id = resolved_scope_id;
|
||||
|
||||
@ -515,6 +517,23 @@ pub fn connectUnixSocket(path: []const u8) !fs.File {
|
||||
};
|
||||
}
|
||||
|
||||
fn if_nametoindex(name: []const u8) !u32 {
|
||||
var ifr: os.ifreq = undefined;
|
||||
var sockfd = try os.socket(os.AF_UNIX, os.SOCK_DGRAM | os.SOCK_CLOEXEC, 0);
|
||||
defer os.close(sockfd);
|
||||
|
||||
std.mem.copy(u8, ifr.ifr_ifrn.name, &name);
|
||||
|
||||
const rc = os.system.syscall3(
|
||||
os.linux.SYS_ioctl,
|
||||
@bitCast(usize, @as(isize, sockfd)),
|
||||
os.linux.SIOCGIFINDEX,
|
||||
@ptrToInt(&ifr),
|
||||
);
|
||||
|
||||
return ifr.ifr_ifru.ifru_ivalue;
|
||||
}
|
||||
|
||||
pub const AddressList = struct {
|
||||
arena: std.heap.ArenaAllocator,
|
||||
addrs: []Address,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user