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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
//! Async networking primitives for TCP/UDP/Unix communication. //! //! This crate is an async version of [`std::net`] and [`std::os::unix::net`]. //! //! # Implementation //! //! This crate uses [`async-io`] for async I/O and [`blocking`] for DNS lookups. //! //! [`async-io`]: https://docs.rs/async-io //! [`blocking`]: https://docs.rs/blocking //! //! # Examples //! //! A simple UDP server that echoes messages back to the sender: //! //! ```no_run //! use async_net::UdpSocket; //! //! # futures_lite::future::block_on(async { //! let socket = UdpSocket::bind("127.0.0.1:8080").await?; //! let mut buf = vec![0u8; 1024]; //! //! loop { //! let (n, addr) = socket.recv_from(&mut buf).await?; //! socket.send_to(&buf[..n], &addr).await?; //! } //! # std::io::Result::Ok(()) }); //! ``` #![forbid(unsafe_code)] #![warn(missing_docs, missing_debug_implementations, rust_2018_idioms)] #[cfg(unix)] pub mod unix; mod addr; mod tcp; mod udp; pub use addr::AsyncToSocketAddrs; pub use tcp::{Incoming, TcpListener, TcpStream}; pub use udp::UdpSocket; use std::io; #[doc(no_inline)] pub use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, Shutdown, SocketAddr, SocketAddrV4, SocketAddrV6}; #[doc(no_inline)] pub use std::net::AddrParseError; /// Converts or resolves addresses to [`SocketAddr`] values. /// /// # Examples /// /// ``` /// # futures_lite::future::block_on(async { /// for addr in async_net::resolve("google.com:80").await? { /// println!("{}", addr); /// } /// # std::io::Result::Ok(()) }); /// ``` pub async fn resolve<A: AsyncToSocketAddrs>(addr: A) -> io::Result<Vec<SocketAddr>> { Ok(addr.to_socket_addrs().await?.collect()) }