//! solaris-specific networking functionality. #![unstable(feature = "unix_socket_exclbind", issue = "123481")] use crate::io; use crate::os::unix::net; use crate::sealed::Sealed; use crate::sys_common::AsInner; /// solaris-specific functionality for `AF_UNIX` sockets [`UnixDatagram`] /// and [`UnixStream`]. /// /// [`UnixDatagram`]: net::UnixDatagram /// [`UnixStream`]: net::UnixStream #[unstable(feature = "unix_socket_exclbind", issue = "123481")] pub trait UnixSocketExt: Sealed { /// Enables exclusive binding on the socket. /// /// If true and if the socket had been set with `SO_REUSEADDR`, /// it neutralises its effect. /// See [`man 3 tcp`](https://docs.oracle.com/cd/E88353_01/html/E37843/setsockopt-3c.html) #[unstable(feature = "unix_socket_exclbind", issue = "123481")] fn so_exclbind(&self, excl: bool) -> io::Result<()>; /// Get the bind exclusivity bind state of the socket. #[unstable(feature = "unix_socket_exclbind", issue = "123481")] fn exclbind(&self) -> io::Result; } #[unstable(feature = "unix_socket_exclbind", issue = "123481")] impl UnixSocketExt for net::UnixDatagram { fn exclbind(&self) -> io::Result { self.as_inner().exclbind() } fn so_exclbind(&self, excl: bool) -> io::Result<()> { self.as_inner().set_exclbind(excl) } } #[unstable(feature = "unix_socket_exclbind", issue = "123481")] impl UnixSocketExt for net::UnixStream { fn exclbind(&self) -> io::Result { self.as_inner().exclbind() } fn so_exclbind(&self, excl: bool) -> io::Result<()> { self.as_inner().set_exclbind(excl) } }