#![cfg(not(loom))]

//! TCP/UDP/Unix bindings for `tokio`.
//!
//! This module contains the TCP/UDP/Unix networking types, similar to the standard
//! library, which can be used to implement networking protocols.
//!
//! # Organization
//!
//! * [`TcpListener`] and [`TcpStream`] provide functionality for communication over TCP
//! * [`UdpSocket`] provides functionality for communication over UDP
//! * [`UnixListener`] and [`UnixStream`] provide functionality for communication over a
//! Unix Domain Stream Socket **(available on Unix only)**
//! * [`UnixDatagram`] provides functionality for communication
//! over Unix Domain Datagram Socket **(available on Unix only)**

//!
//! [`TcpListener`]: TcpListener
//! [`TcpStream`]: TcpStream
//! [`UdpSocket`]: UdpSocket
//! [`UnixListener`]: UnixListener
//! [`UnixStream`]: UnixStream
//! [`UnixDatagram`]: UnixDatagram

mod addr;
cfg_not_wasi! {
    #[cfg(feature = "net")]
    pub(crate) use addr::to_socket_addrs;
}
pub use addr::ToSocketAddrs;

cfg_net! {
    mod lookup_host;
    pub use lookup_host::lookup_host;

    pub mod tcp;
    pub use tcp::listener::TcpListener;
    pub use tcp::stream::TcpStream;
    cfg_not_wasi! {
        pub use tcp::socket::TcpSocket;

        mod udp;
        pub use udp::UdpSocket;
    }
}

cfg_net_unix! {
    pub mod unix;
    pub use unix::datagram::socket::UnixDatagram;
    pub use unix::listener::UnixListener;
    pub use unix::stream::UnixStream;
}

cfg_net_windows! {
    pub mod windows;
}
