1 //! Networking primitives. 2 //! 3 //! The types provided in this module are non-blocking by default and are 4 //! designed to be portable across all supported Mio platforms. As long as the 5 //! [portability guidelines] are followed, the behavior should be identical no 6 //! matter the target platform. 7 //! 8 //! [portability guidelines]: ../struct.Poll.html#portability 9 //! 10 //! # Notes 11 //! 12 //! When using a datagram based socket, i.e. [`UdpSocket`] or [`UnixDatagram`], 13 //! its only possible to receive a packet once. This means that if you provide a 14 //! buffer that is too small you won't be able to receive the data anymore. How 15 //! OSs deal with this situation is different for each OS: 16 //! * Unixes, such as Linux, FreeBSD and macOS, will simply fill the buffer and 17 //! return the amount of bytes written. This means that if the returned value 18 //! is equal to the size of the buffer it may have only written a part of the 19 //! packet (or the packet has the same size as the buffer). 20 //! * Windows returns an `WSAEMSGSIZE` error. 21 //! 22 //! Mio does not change the value (either ok or error) returned by the OS, it's 23 //! up to the user handle this. How to deal with these difference is still up 24 //! for debate, specifically in 25 //! <https://github.com/rust-lang/rust/issues/55794>. The best advice we can 26 //! give is to always call receive with a large enough buffer. 27 28 mod tcp; 29 pub use self::tcp::{TcpListener, TcpStream}; 30 31 #[cfg(not(target_os = "wasi"))] 32 mod udp; 33 #[cfg(not(target_os = "wasi"))] 34 pub use self::udp::UdpSocket; 35 36 #[cfg(unix)] 37 mod uds; 38 #[cfg(unix)] 39 pub use self::uds::{UnixDatagram, UnixListener, UnixStream}; 40