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