扩展库 / 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 / opcodeName | DNS 数字代码转名称;未知值返回 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 可用性、长期压力或其他架构。