linuxLookupNameFromDnsSearch
Function parameters
Parameters
Type definitions in this namespace
Types
Functions in this namespace
Functions
- tcpConnectToHost
- All memory allocated with `allocator` will be freed before this function returns.
- getAddressList
- Call `AddressList.deinit` on the result.
Error sets in this namespace
Error Sets
= switch (native_os) { .windows => builtin.os.version_range.windows.isAtLeast(.win10_rs4) orelse false, .wasi => false, else => true, }
Values
- has_unix_sockets
- = switch (native_os) { .windows => builtin.os.version_range.windows.isAtLeast(.win10_rs4) orelse false, .wasi => false, else => true, }
Source
Implementation
fn linuxLookupNameFromDnsSearch(
gpa: Allocator,
addrs: *ArrayList(LookupAddr),
canon: *ArrayList(u8),
name: []const u8,
family: posix.sa_family_t,
port: u16,
) !void {
var rc: ResolvConf = undefined;
rc.init(gpa) catch return error.ResolveConfParseFailed;
defer rc.deinit();
// Count dots, suppress search when >=ndots or name ends in
// a dot, which is an explicit request for global scope.
var dots: usize = 0;
for (name) |byte| {
if (byte == '.') dots += 1;
}
const search = if (dots >= rc.ndots or mem.endsWith(u8, name, "."))
""
else
rc.search.items;
var canon_name = name;
// Strip final dot for canon, fail if multiple trailing dots.
if (mem.endsWith(u8, canon_name, ".")) canon_name.len -= 1;
if (mem.endsWith(u8, canon_name, ".")) return error.UnknownHostName;
// Name with search domain appended is setup in canon[]. This both
// provides the desired default canonical name (if the requested
// name is not a CNAME record) and serves as a buffer for passing
// the full requested name to name_from_dns.
try canon.resize(gpa, canon_name.len);
@memcpy(canon.items, canon_name);
try canon.append(gpa, '.');
var tok_it = mem.tokenizeAny(u8, search, " \t");
while (tok_it.next()) |tok| {
canon.shrinkRetainingCapacity(canon_name.len + 1);
try canon.appendSlice(gpa, tok);
try linuxLookupNameFromDns(gpa, addrs, canon, canon.items, family, rc, port);
if (addrs.items.len != 0) return;
}
canon.shrinkRetainingCapacity(canon_name.len);
return linuxLookupNameFromDns(gpa, addrs, canon, name, family, rc, port);
}