1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
cfg_dns! {
    use crate::net::addr::ToSocketAddrs;

    use std::io;
    use std::net::SocketAddr;

    /// Performs a DNS resolution.
    ///
    /// The returned iterator may not actually yield any values depending on the
    /// outcome of any resolution performed.
    ///
    /// This API is not intended to cover all DNS use cases. Anything beyond the
    /// basic use case should be done with a specialized library.
    ///
    /// # Examples
    ///
    /// To resolve a DNS entry:
    ///
    /// ```no_run
    /// use tokio::net;
    /// use std::io;
    ///
    /// #[tokio::main]
    /// async fn main() -> io::Result<()> {
    ///     for addr in net::lookup_host("localhost:3000").await? {
    ///         println!("socket address is {}", addr);
    ///     }
    ///
    ///     Ok(())
    /// }
    /// ```
    pub async fn lookup_host<T>(host: T) -> io::Result<impl Iterator<Item = SocketAddr>>
    where
        T: ToSocketAddrs
    {
        host.to_socket_addrs().await
    }
}