扩展库 / dns

dns

主机名校验、DNS 标签编码和系统地址解析,C 与 xlang 使用同一原生实现。

版本 1.0.0 · C / xlang · 无扩展库依赖

快速开始

import dns

println(dns.encodeName("example.com"))  // 076578616d706c6503636f6d00
array<string> ips = dns.resolve("localhost", 4)

对照范例分别位于 release/examples/extlibs/dns.xl 和 release/extlibs/dns/examples/basic.c,展示相同的固定输出;解析检查只使用本机 localhost,不依赖外部 DNS。

接口

入口用途
typeName / className / rcodeName / opcodeNameDNS 数字代码转名称;未知值返回 UNKNOWN。
validName(name)校验 ASCII 主机名标签,允许末尾根点;返回 1 或 0。
encodeName(domain)将主机名编码为 DNS 标签序列的十六进制文本;无效输入抛 ValueError。
isIpv4(address)严格检验数字 IPv4;格式错误或 IPv6 返回 0,不抛格式异常。
resolve(host, family = 0)委托系统解析地址;family 为 0、4 或 6,结果顺序由系统决定。

语言入口不会让内嵌 NUL 截断 C 字符串:验证入口返回 0,编码和解析入口抛 ValueError。此包不做 IDNA/Punycode 转换,也不是完整 DNS 报文客户端或服务器。

C 端包含 extlibs/dns/include/dns_native.h。名称映射返回借用的静态文本;xdns_encode_name 的结果用 xrtFree 释放,xdns_resolve 的结果用 xrtValueRelease 释放。整数 ABI 使用 int64_t,兼容 Windows 与 Linux LP64;XLang 对编码文本直接接管 XRT 分配。

验证

powershell -NoProfile -ExecutionPolicy Bypass -File release/extlibs/dns/test/check.ps1
bash release/extlibs/dns/test/check.sh

2026-10-27:Windows 包级 C、语言 JIT/AOT、独立 C EXE 和双语同输出通过;Linux 新构建发布版的 C ASan/UBSan、语言 JIT/AOT 与独立 C EXE 通过。测试不覆盖公网 DNS 可用性、长期压力或其他架构。