| //! NetBSD-specific networking functionality. | |
| #![unstable(feature = "unix_socket_ancillary_data", issue = "76915")] | |
| use crate::ffi::CStr; | |
| use crate::io; | |
| use crate::os::unix::net; | |
| use crate::sealed::Sealed; | |
| use crate::sys::AsInner; | |
| /// NetBSD-specific functionality for `AF_UNIX` sockets [`UnixDatagram`] | |
| /// and [`UnixStream`]. | |
| /// | |
| /// [`UnixDatagram`]: net::UnixDatagram | |
| /// [`UnixStream`]: net::UnixStream | |
| #[unstable(feature = "unix_socket_ancillary_data", issue = "76915")] | |
| pub trait UnixSocketExt: Sealed { | |
| /// Query the current setting of socket option `LOCAL_CREDS`. | |
| #[unstable(feature = "unix_socket_ancillary_data", issue = "76915")] | |
| fn local_creds(&self) -> io::Result<bool>; | |
| /// Enable or disable socket option `LOCAL_CREDS`. | |
| /// | |
| /// 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)] | |
| /// use std::os::netbsd::net::UnixSocketExt; | |
| /// use std::os::unix::net::UnixDatagram; | |
| /// | |
| /// fn main() -> std::io::Result<()> { | |
| /// let sock = UnixDatagram::unbound()?; | |
| /// sock.set_local_creds(true).expect("set_local_creds failed"); | |
| /// Ok(()) | |
| /// } | |
| /// ``` | |
| #[unstable(feature = "unix_socket_ancillary_data", issue = "76915")] | |
| fn set_local_creds(&self, local_creds: bool) -> io::Result<()>; | |
| /// Gets a filter name if one had been set previously on the socket. | |
| #[unstable(feature = "acceptfilter", issue = "121891")] | |
| fn acceptfilter(&self) -> io::Result<&CStr>; | |
| /// Set or disable a filter on the socket to filter incoming connections | |
| /// to defer it before accept(2) | |
| #[unstable(feature = "acceptfilter", issue = "121891")] | |
| fn set_acceptfilter(&self, name: &CStr) -> io::Result<()>; | |
| } | |
| #[unstable(feature = "unix_socket_ancillary_data", issue = "76915")] | |
| impl UnixSocketExt for net::UnixDatagram { | |
| fn local_creds(&self) -> io::Result<bool> { | |
| self.as_inner().local_creds() | |
| } | |
| fn set_local_creds(&self, local_creds: bool) -> io::Result<()> { | |
| self.as_inner().set_local_creds(local_creds) | |
| } | |
| fn acceptfilter(&self) -> io::Result<&CStr> { | |
| self.as_inner().acceptfilter() | |
| } | |
| fn set_acceptfilter(&self, name: &CStr) -> io::Result<()> { | |
| self.as_inner().set_acceptfilter(name) | |
| } | |
| } | |
| #[unstable(feature = "unix_socket_ancillary_data", issue = "76915")] | |
| impl UnixSocketExt for net::UnixStream { | |
| fn local_creds(&self) -> io::Result<bool> { | |
| self.as_inner().local_creds() | |
| } | |
| fn set_local_creds(&self, local_creds: bool) -> io::Result<()> { | |
| self.as_inner().set_local_creds(local_creds) | |
| } | |
| fn acceptfilter(&self) -> io::Result<&CStr> { | |
| self.as_inner().acceptfilter() | |
| } | |
| fn set_acceptfilter(&self, name: &CStr) -> io::Result<()> { | |
| self.as_inner().set_acceptfilter(name) | |
| } | |
| } |