| //! Linux and Android-specific socket functionality. | |
| use crate::io; | |
| use crate::os::unix::net; | |
| use crate::sys::AsInner; | |
| /// Linux-specific functionality for `AF_UNIX` sockets [`UnixDatagram`] | |
| /// and [`UnixStream`]. | |
| /// | |
| /// [`UnixDatagram`]: net::UnixDatagram | |
| /// [`UnixStream`]: net::UnixStream | |
| #[unstable(feature = "unix_socket_ancillary_data", issue = "76915")] | |
| pub impl(self) trait UnixSocketExt { | |
| /// Query the current setting of socket option `SO_PASSCRED`. | |
| #[unstable(feature = "unix_socket_ancillary_data", issue = "76915")] | |
| fn passcred(&self) -> io::Result<bool>; | |
| /// Enable or disable socket option `SO_PASSCRED`. | |
| /// | |
| /// This option enables the credentials of the sending process to be | |
| /// received as a control message in [`AncillaryData`]. | |
| /// | |
| /// [`AncillaryData`]: net::AncillaryData | |
| /// | |
| /// # Examples | |
| /// | |
| /// ```no_run | |
| /// #![feature(unix_socket_ancillary_data)] | |
| /// #[cfg(target_os = "linux")] | |
| /// use std::os::linux::net::UnixSocketExt; | |
| /// #[cfg(target_os = "android")] | |
| /// use std::os::android::net::UnixSocketExt; | |
| /// use std::os::unix::net::UnixDatagram; | |
| /// | |
| /// fn main() -> std::io::Result<()> { | |
| /// let sock = UnixDatagram::unbound()?; | |
| /// sock.set_passcred(true).expect("set_passcred failed"); | |
| /// Ok(()) | |
| /// } | |
| /// ``` | |
| #[unstable(feature = "unix_socket_ancillary_data", issue = "76915")] | |
| fn set_passcred(&self, passcred: bool) -> io::Result<()>; | |
| } | |
| #[unstable(feature = "unix_socket_ancillary_data", issue = "76915")] | |
| impl UnixSocketExt for net::UnixDatagram { | |
| fn passcred(&self) -> io::Result<bool> { | |
| self.as_inner().passcred() | |
| } | |
| fn set_passcred(&self, passcred: bool) -> io::Result<()> { | |
| self.as_inner().set_passcred(passcred) | |
| } | |
| } | |
| #[unstable(feature = "unix_socket_ancillary_data", issue = "76915")] | |
| impl UnixSocketExt for net::UnixStream { | |
| fn passcred(&self) -> io::Result<bool> { | |
| self.as_inner().passcred() | |
| } | |
| fn set_passcred(&self, passcred: bool) -> io::Result<()> { | |
| self.as_inner().set_passcred(passcred) | |
| } | |
| } |