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