    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    //! The [`is_read_write`] function.

    #[cfg(all(feature = "fs", feature = "net"))]
    use crate::{backend, io};
    #[cfg(all(feature = "fs", feature = "net"))]
    use backend::fd::AsFd;

    /// Returns a pair of booleans indicating whether the file descriptor is
    /// readable and/or writable, respectively.
    ///
    /// Unlike [`is_file_read_write`], this correctly detects whether sockets
    /// have been shutdown, partially or completely.
    ///
    /// [`is_file_read_write`]: crate::fs::is_file_read_write
    #[inline]
    #[cfg(all(feature = "fs", feature = "net"))]
    #[cfg_attr(doc_cfg, doc(cfg(all(feature = "fs", feature = "net"))))]
    pub fn is_read_write<Fd: AsFd>(fd: Fd) -> io::Result<(bool, bool)> {
        backend::io::syscalls::is_read_write(fd.as_fd())
    }