40 breaking releases

0.41.1 Nov 13, 2023
0.40.1 Oct 18, 2023
0.40.0 Jun 20, 2023
0.39.0 Feb 24, 2023
0.6.0 Mar 29, 2019

#1505 in Asynchronous

Download history 41427/week @ 2023-12-15 22965/week @ 2023-12-22 26693/week @ 2023-12-29 42040/week @ 2024-01-05 45880/week @ 2024-01-12 48404/week @ 2024-01-19 47364/week @ 2024-01-26 48567/week @ 2024-02-02 50319/week @ 2024-02-09 60736/week @ 2024-02-16 56028/week @ 2024-02-23 51930/week @ 2024-03-01 52508/week @ 2024-03-08 57027/week @ 2024-03-15 61670/week @ 2024-03-22 51791/week @ 2024-03-29

232,101 downloads per month
Used in 216 crates (6 directly)

MIT license

360KB
7K SLoC

DNS name resolution

Transport for libp2p.

This crate provides the type async_std::Transport and tokio::Transport for use with async-std and tokio, respectively.

A Transport is an address-rewriting libp2p_core::Transport wrapper around an inner Transport. The composed transport behaves like the inner transport, except that libp2p_core::Transport::dial resolves /dns/..., /dns4/..., /dns6/... and /dnsaddr/... components of the given Multiaddr through a DNS, replacing them with the resolved protocols (typically TCP/IP).

The async-std feature and hence the async_std::Transport are enabled by default. Tokio users can furthermore opt-in to the tokio-dns-over-rustls and tokio-dns-over-https-rustls features. For more information about these features, please refer to the documentation of trust-dns-resolver.

On Unix systems, if no custom configuration is given, trust-dns-resolver will try to parse the /etc/resolv.conf file. This approach comes with a few caveats to be aware of:

  1. This fails (panics even!) if /etc/resolv.conf does not exist. This is the case on all versions of Android.
  2. DNS configuration is only evaluated during startup. Runtime changes are thus ignored.
  3. DNS resolution is obviously done in process and consequently not using any system APIs (like libc's gethostbyname). Again this is problematic on platforms like Android, where there's a lot of complexity hidden behind the system APIs. If the implementation requires different characteristics, one should consider providing their own implementation of Transport or use platform specific APIs to extract the host's DNS configuration (if possible) and provide a custom ResolverConfig.

Dependencies

~9–24MB
~362K SLoC