diff options
| author | David Carlier <devnexen@gmail.com> | 2024-04-04 23:36:13 +0100 |
|---|---|---|
| committer | David Carlier <devnexen@gmail.com> | 2025-06-10 19:44:45 +0100 |
| commit | 1bbabb7ff744f18edaf3da30f841a287de2077d6 (patch) | |
| tree | a79f6c4bea563dfec5ed5849c3c655bc521a1765 /library/std/src/os/solaris/net.rs | |
| parent | c6a955468b025dbe3d1de3e8f3e30496d1fb7f40 (diff) | |
| download | rust-1bbabb7ff744f18edaf3da30f841a287de2077d6.tar.gz rust-1bbabb7ff744f18edaf3da30f841a287de2077d6.zip | |
std::net: adding `unix_socket_exclbind` feature for solaris/illumos.
allows to have a tigher control over the binding exclusivness of the socket.
Diffstat (limited to 'library/std/src/os/solaris/net.rs')
| -rw-r--r-- | library/std/src/os/solaris/net.rs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/library/std/src/os/solaris/net.rs b/library/std/src/os/solaris/net.rs new file mode 100644 index 00000000000..ca841f15b0e --- /dev/null +++ b/library/std/src/os/solaris/net.rs @@ -0,0 +1,50 @@ +//! 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<bool>; +} + +#[unstable(feature = "unix_socket_exclbind", issue = "123481")] +impl UnixSocketExt for net::UnixDatagram { + fn exclbind(&self) -> io::Result<bool> { + 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<bool> { + self.as_inner().exclbind() + } + + fn so_exclbind(&self, excl: bool) -> io::Result<()> { + self.as_inner().set_exclbind(excl) + } +} |
