41次重大发布
新 0.42.0 | 2024年8月9日 |
---|---|
0.41.1 | 2023年11月13日 |
0.40.1 | 2023年10月18日 |
0.40.0 | 2023年6月20日 |
0.6.0 | 2019年3月29日 |
#1546 在 异步
238,521 每月下载量
在 234 个crate中使用了(6个直接使用)
350KB
6.5K SLoC
DNS名称解析
Transport
for libp2p.
此crate提供了用于async-std
和tokio
的async_std::Transport
和tokio::Transport
类型。
《Transport》是一个地址重写封装,它围绕一个内部 Transport
实现了一个 libp2p_core::Transport
。组合传输的行为类似于内部传输,除了 libp2p_core::Transport::dial
通过DNS解析给定的 Multiaddr
中的 /dns/...
、/dns4/...
、/dns6/...
和 /dnsaddr/...
组件,并将它们替换为解析后的协议(通常是TCP/IP)。
async-std
特性和因此 async_std::Transport
默认启用。Tokio 用户还可以选择启用 tokio-dns-over-rustls
和 tokio-dns-over-https-rustls
特性。有关这些特性的更多信息,请参阅 trust-dns-resolver 的文档。
在 Unix 系统上,如果没有提供自定义配置,trust-dns-resolver 将尝试解析 /etc/resolv.conf
文件。这种方法有一些需要注意的地方
- 如果
/etc/resolv.conf
不存在,则此操作失败(甚至会导致恐慌!)。在所有版本的 Android 上都是这种情况。 - DNS 配置仅在启动时评估。因此,运行时更改将被忽略。
- DNS 解析显然是在进程内完成的,并且因此不使用任何系统 API(如 libc 的
gethostbyname
)。这同样在平台(如 Android)上存在问题,在这些平台上,系统 API 隐藏了大量的复杂性。
如果实现需要不同的特性,应考虑提供自己的 Transport
实现,或者使用特定于平台的 API 提取主机的 DNS 配置(如果可能),并提供自定义 ResolverConfig
。
依赖关系
~9–21MB
~325K SLoC