diff options
| author | Milan Landaverde <milanlandaverde@gmail.com> | 2021-05-11 15:41:32 -0400 |
|---|---|---|
| committer | Milan <milanlandaverde@gmail.com> | 2021-10-10 14:01:06 -0400 |
| commit | 63ebfc2c55af8b7581bea067f29276f73c7fa503 (patch) | |
| tree | 656968c6817ce736908ac4f4bd458c12c3436cc8 /library/std/src/os/unix/net/stream.rs | |
| parent | 0c87288f92b7e6365d61cfbcbc453ea4c696c030 (diff) | |
| download | rust-63ebfc2c55af8b7581bea067f29276f73c7fa503.tar.gz rust-63ebfc2c55af8b7581bea067f29276f73c7fa503.zip | |
Add abstract namespace support for Unix domain sockets
Diffstat (limited to 'library/std/src/os/unix/net/stream.rs')
| -rw-r--r-- | library/std/src/os/unix/net/stream.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/library/std/src/os/unix/net/stream.rs b/library/std/src/os/unix/net/stream.rs index 4119de3c03c..00a713f0732 100644 --- a/library/std/src/os/unix/net/stream.rs +++ b/library/std/src/os/unix/net/stream.rs @@ -106,6 +106,37 @@ impl UnixStream { } } + /// Connects to the socket specified by [`address`]. + /// + /// [`address`]: crate::os::unix::net::SocketAddr + /// + /// # Examples + /// + /// ```no_run + /// #![feature(unix_socket_abstract)] + /// use std::os::unix::net::{UnixStream, SocketAddr}; + /// + /// fn main() -> std::io::Result<()> { + /// let addr = SocketAddr::from_abstract_namespace(b"hidden")?; // Linux only + /// match UnixStream::connect_addr(&addr) { + /// Ok(sock) => sock, + /// Err(e) => { + /// println!("Couldn't connect: {:?}", e); + /// return Err(e) + /// } + /// }; + /// Ok(()) + /// } + /// ```` + #[unstable(feature = "unix_socket_abstract", issue = "42048")] + pub fn connect_addr(socket_addr: &SocketAddr) -> io::Result<UnixStream> { + unsafe { + let inner = Socket::new_raw(libc::AF_UNIX, libc::SOCK_STREAM)?; + cvt(libc::connect(*inner.as_inner(), &socket_addr.addr as *const _ as *const _, socket_addr.len))?; + Ok(UnixStream(inner)) + } + } + /// Creates an unnamed pair of connected sockets. /// /// Returns two `UnixStream`s which are connected to each other. |
