pub struct UnixStream(_);Expand description
A Unix stream socket.
Examples
use std::os::unix::net::UnixStream;
use std::io::prelude::*;
fn main() -> std::io::Result<()> {
let mut stream = UnixStream::connect("/path/to/my/socket")?;
stream.write_all(b"hello world")?;
let mut response = String::new();
stream.read_to_string(&mut response)?;
println!("{response}");
Ok(())
}RunImplementations
impl UnixStream
source
impl UnixStream
sourcepub fn connect_addr(socket_addr: &SocketAddr) -> Result<UnixStream>
source
pub fn connect_addr(socket_addr: &SocketAddr) -> Result<UnixStream>
sourceConnects to the socket specified by address.
Examples
#![feature(unix_socket_abstract)]
use std::os::unix::net::{UnixListener, UnixStream};
fn main() -> std::io::Result<()> {
let listener = UnixListener::bind("/path/to/the/socket")?;
let addr = listener.local_addr()?;
let sock = match UnixStream::connect_addr(&addr) {
Ok(sock) => sock,
Err(e) => {
println!("Couldn't connect: {e:?}");
return Err(e)
}
};
Ok(())
}Runpub fn pair() -> Result<(UnixStream, UnixStream)>
source
pub fn pair() -> Result<(UnixStream, UnixStream)>
sourceCreates an unnamed pair of connected sockets.
Returns two UnixStreams which are connected to each other.
Examples
use std::os::unix::net::UnixStream;
let (sock1, sock2) = match UnixStream::pair() {
Ok((sock1, sock2)) => (sock1, sock2),
Err(e) => {
println!("Couldn't create a pair of sockets: {e:?}");
return
}
};Runpub fn try_clone(&self) -> Result<UnixStream>
source
pub fn try_clone(&self) -> Result<UnixStream>
sourceCreates a new independently owned handle to the underlying socket.
The returned UnixStream is a reference to the same stream that this
object references. Both handles will read and write the same stream of
data, and options set on one stream will be propagated to the other
stream.
Examples
use std::os::unix::net::UnixStream;
fn main() -> std::io::Result<()> {
let socket = UnixStream::connect("/tmp/sock")?;
let sock_copy = socket.try_clone().expect("Couldn't clone socket");
Ok(())
}Runpub fn local_addr(&self) -> Result<SocketAddr>
source
pub fn local_addr(&self) -> Result<SocketAddr>
sourcepub fn peer_addr(&self) -> Result<SocketAddr>
source
pub fn peer_addr(&self) -> Result<SocketAddr>
sourcepub fn peer_cred(&self) -> Result<UCred>
source
pub fn peer_cred(&self) -> Result<UCred>
sourceGets the peer credentials for this Unix domain socket.
Examples
#![feature(peer_credentials_unix_socket)]
use std::os::unix::net::UnixStream;
fn main() -> std::io::Result<()> {
let socket = UnixStream::connect("/tmp/sock")?;
let peer_cred = socket.peer_cred().expect("Couldn't get peer credentials");
Ok(())
}Runpub fn set_read_timeout(&self, timeout: Option<Duration>) -> Result<()>
source
pub fn set_read_timeout(&self, timeout: Option<Duration>) -> Result<()>
sourceSets the read timeout for the socket.
If the provided value is None, then read calls will block
indefinitely. An Err is returned if the zero Duration is passed to this
method.
Examples
use std::os::unix::net::UnixStream;
use std::time::Duration;
fn main() -> std::io::Result<()> {
let socket = UnixStream::connect("/tmp/sock")?;
socket.set_read_timeout(Some(Duration::new(1, 0))).expect("Couldn't set read timeout");
Ok(())
}RunAn Err is returned if the zero Duration is passed to this
method:
use std::io;
use std::os::unix::net::UnixStream;
use std::time::Duration;
fn main() -> std::io::Result<()> {
let socket = UnixStream::connect("/tmp/sock")?;
let result = socket.set_read_timeout(Some(Duration::new(0, 0)));
let err = result.unwrap_err();
assert_eq!(err.kind(), io::ErrorKind::InvalidInput);
Ok(())
}Runpub fn set_write_timeout(&self, timeout: Option<Duration>) -> Result<()>
source
pub fn set_write_timeout(&self, timeout: Option<Duration>) -> Result<()>
sourceSets the write timeout for the socket.
If the provided value is None, then write calls will block
indefinitely. An Err is returned if the zero Duration is
passed to this method.
Examples
use std::os::unix::net::UnixStream;
use std::time::Duration;
fn main() -> std::io::Result<()> {
let socket = UnixStream::connect("/tmp/sock")?;
socket.set_write_timeout(Some(Duration::new(1, 0)))
.expect("Couldn't set write timeout");
Ok(())
}RunAn Err is returned if the zero Duration is passed to this
method:
use std::io;
use std::net::UdpSocket;
use std::time::Duration;
fn main() -> std::io::Result<()> {
let socket = UdpSocket::bind("127.0.0.1:34254")?;
let result = socket.set_write_timeout(Some(Duration::new(0, 0)));
let err = result.unwrap_err();
assert_eq!(err.kind(), io::ErrorKind::InvalidInput);
Ok(())
}Runpub fn read_timeout(&self) -> Result<Option<Duration>>
source
pub fn read_timeout(&self) -> Result<Option<Duration>>
sourceReturns the read timeout of this socket.
Examples
use std::os::unix::net::UnixStream;
use std::time::Duration;
fn main() -> std::io::Result<()> {
let socket = UnixStream::connect("/tmp/sock")?;
socket.set_read_timeout(Some(Duration::new(1, 0))).expect("Couldn't set read timeout");
assert_eq!(socket.read_timeout()?, Some(Duration::new(1, 0)));
Ok(())
}Runpub fn write_timeout(&self) -> Result<Option<Duration>>
source
pub fn write_timeout(&self) -> Result<Option<Duration>>
sourceReturns the write timeout of this socket.
Examples
use std::os::unix::net::UnixStream;
use std::time::Duration;
fn main() -> std::io::Result<()> {
let socket = UnixStream::connect("/tmp/sock")?;
socket.set_write_timeout(Some(Duration::new(1, 0)))
.expect("Couldn't set write timeout");
assert_eq!(socket.write_timeout()?, Some(Duration::new(1, 0)));
Ok(())
}Runpub fn set_nonblocking(&self, nonblocking: bool) -> Result<()>
source
pub fn set_nonblocking(&self, nonblocking: bool) -> Result<()>
sourcepub fn set_passcred(&self, passcred: bool) -> Result<()>
source
pub fn set_passcred(&self, passcred: bool) -> Result<()>
sourceMoves the socket to pass unix credentials as control message in SocketAncillary.
Set the socket option SO_PASSCRED.
Examples
#![feature(unix_socket_ancillary_data)]
use std::os::unix::net::UnixStream;
fn main() -> std::io::Result<()> {
let socket = UnixStream::connect("/tmp/sock")?;
socket.set_passcred(true).expect("Couldn't set passcred");
Ok(())
}Runpub fn passcred(&self) -> Result<bool>
source
pub fn passcred(&self) -> Result<bool>
sourceGet the current value of the socket for passing unix credentials in SocketAncillary.
This value can be change by set_passcred.
Get the socket option SO_PASSCRED.
pub fn take_error(&self) -> Result<Option<Error>>
source
pub fn take_error(&self) -> Result<Option<Error>>
sourceReturns the value of the SO_ERROR option.
Examples
use std::os::unix::net::UnixStream;
fn main() -> std::io::Result<()> {
let socket = UnixStream::connect("/tmp/sock")?;
if let Ok(Some(err)) = socket.take_error() {
println!("Got error: {err:?}");
}
Ok(())
}RunPlatform specific
On Redox this always returns None.
pub fn shutdown(&self, how: Shutdown) -> Result<()>
source
pub fn shutdown(&self, how: Shutdown) -> Result<()>
sourceShuts down the read, write, or both halves of this connection.
This function will cause all pending and future I/O calls on the
specified portions to immediately return with an appropriate value
(see the documentation of Shutdown).
Examples
use std::os::unix::net::UnixStream;
use std::net::Shutdown;
fn main() -> std::io::Result<()> {
let socket = UnixStream::connect("/tmp/sock")?;
socket.shutdown(Shutdown::Both).expect("shutdown function failed");
Ok(())
}Runpub fn peek(&self, buf: &mut [u8]) -> Result<usize>
source
pub fn peek(&self, buf: &mut [u8]) -> Result<usize>
sourceReceives data on the socket from the remote address to which it is connected, without removing that data from the queue. On success, returns the number of bytes peeked.
Successive calls return the same data. This is accomplished by passing
MSG_PEEK as a flag to the underlying recv system call.
Examples
#![feature(unix_socket_peek)]
use std::os::unix::net::UnixStream;
fn main() -> std::io::Result<()> {
let socket = UnixStream::connect("/tmp/sock")?;
let mut buf = [0; 10];
let len = socket.peek(&mut buf).expect("peek failed");
Ok(())
}Runpub fn recv_vectored_with_ancillary(
&self,
bufs: &mut [IoSliceMut<'_>],
ancillary: &mut SocketAncillary<'_>
) -> Result<usize>
source
pub fn recv_vectored_with_ancillary(
&self,
bufs: &mut [IoSliceMut<'_>],
ancillary: &mut SocketAncillary<'_>
) -> Result<usize>
sourceReceives data and ancillary data from socket.
On success, returns the number of bytes read.
Examples
#![feature(unix_socket_ancillary_data)]
use std::os::unix::net::{UnixStream, SocketAncillary, AncillaryData};
use std::io::IoSliceMut;
fn main() -> std::io::Result<()> {
let socket = UnixStream::connect("/tmp/sock")?;
let mut buf1 = [1; 8];
let mut buf2 = [2; 16];
let mut buf3 = [3; 8];
let mut bufs = &mut [
IoSliceMut::new(&mut buf1),
IoSliceMut::new(&mut buf2),
IoSliceMut::new(&mut buf3),
][..];
let mut fds = [0; 8];
let mut ancillary_buffer = [0; 128];
let mut ancillary = SocketAncillary::new(&mut ancillary_buffer[..]);
let size = socket.recv_vectored_with_ancillary(bufs, &mut ancillary)?;
println!("received {size}");
for ancillary_result in ancillary.messages() {
if let AncillaryData::ScmRights(scm_rights) = ancillary_result.unwrap() {
for fd in scm_rights {
println!("receive file descriptor: {fd}");
}
}
}
Ok(())
}Runpub fn send_vectored_with_ancillary(
&self,
bufs: &[IoSlice<'_>],
ancillary: &mut SocketAncillary<'_>
) -> Result<usize>
source
pub fn send_vectored_with_ancillary(
&self,
bufs: &[IoSlice<'_>],
ancillary: &mut SocketAncillary<'_>
) -> Result<usize>
sourceSends data and ancillary data on the socket.
On success, returns the number of bytes written.
Examples
#![feature(unix_socket_ancillary_data)]
use std::os::unix::net::{UnixStream, SocketAncillary};
use std::io::IoSlice;
fn main() -> std::io::Result<()> {
let socket = UnixStream::connect("/tmp/sock")?;
let buf1 = [1; 8];
let buf2 = [2; 16];
let buf3 = [3; 8];
let bufs = &[
IoSlice::new(&buf1),
IoSlice::new(&buf2),
IoSlice::new(&buf3),
][..];
let fds = [0, 1, 2];
let mut ancillary_buffer = [0; 128];
let mut ancillary = SocketAncillary::new(&mut ancillary_buffer[..]);
ancillary.add_fds(&fds[..]);
socket.send_vectored_with_ancillary(bufs, &mut ancillary)
.expect("send_vectored_with_ancillary function failed");
Ok(())
}RunTrait Implementations
impl AsFd for UnixStream
source
impl AsFd for UnixStream
sourceimpl AsRawFd for UnixStream
source
impl AsRawFd for UnixStream
sourceimpl Debug for UnixStream
source
impl Debug for UnixStream
sourceimpl From<OwnedFd> for UnixStream
source
impl From<OwnedFd> for UnixStream
sourceimpl From<UnixStream> for OwnedFd
source
impl From<UnixStream> for OwnedFd
sourcefn from(unix_stream: UnixStream) -> OwnedFd
source
fn from(unix_stream: UnixStream) -> OwnedFd
sourceConverts to this type from the input type.
impl FromRawFd for UnixStream
source
impl FromRawFd for UnixStream
sourceunsafe fn from_raw_fd(fd: RawFd) -> UnixStreamⓘNotable traits for UnixStreamimpl Read for UnixStreamimpl<'a> Read for &'a UnixStreamimpl Write for UnixStreamimpl<'a> Write for &'a UnixStream
source
unsafe fn from_raw_fd(fd: RawFd) -> UnixStreamⓘNotable traits for UnixStreamimpl Read for UnixStreamimpl<'a> Read for &'a UnixStreamimpl Write for UnixStreamimpl<'a> Write for &'a UnixStream
sourceConstructs a new instance of Self from the given raw file
descriptor. Read more
impl IntoRawFd for UnixStream
source
impl IntoRawFd for UnixStream
sourcefn into_raw_fd(self) -> RawFd
source
fn into_raw_fd(self) -> RawFd
sourceConsumes this object, returning the raw underlying file descriptor. Read more
impl Read for UnixStream
source
impl Read for UnixStream
sourcefn read(&mut self, buf: &mut [u8]) -> Result<usize>
source
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
sourcePull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>
source
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>
sourceLike read, except that it reads into a slice of buffers. Read more
fn is_read_vectored(&self) -> bool
source
fn is_read_vectored(&self) -> bool
sourceDetermines if this Reader has an efficient read_vectored
implementation. Read more
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>
1.0.0 · source
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>
1.0.0 · sourceRead all bytes until EOF in this source, placing them into buf. Read more
fn read_to_string(&mut self, buf: &mut String) -> Result<usize>
1.0.0 · source
fn read_to_string(&mut self, buf: &mut String) -> Result<usize>
1.0.0 · sourceRead all bytes until EOF in this source, appending them to buf. Read more
fn read_exact(&mut self, buf: &mut [u8]) -> Result<()>
1.6.0 · source
fn read_exact(&mut self, buf: &mut [u8]) -> Result<()>
1.6.0 · sourceRead the exact number of bytes required to fill buf. Read more
fn read_buf(&mut self, buf: &mut ReadBuf<'_>) -> Result<()>
source
fn read_buf(&mut self, buf: &mut ReadBuf<'_>) -> Result<()>
sourcePull some bytes from this source into the specified buffer. Read more
fn read_buf_exact(&mut self, buf: &mut ReadBuf<'_>) -> Result<()>
source
fn read_buf_exact(&mut self, buf: &mut ReadBuf<'_>) -> Result<()>
sourceRead the exact number of bytes required to fill buf. Read more
fn by_ref(&mut self) -> &mut Self where
Self: Sized,
1.0.0 · source
fn by_ref(&mut self) -> &mut Self where
Self: Sized,
1.0.0 · sourceCreates a “by reference” adaptor for this instance of Read. Read more
fn bytes(self) -> Bytes<Self>ⓘNotable traits for Bytes<R>impl<R: Read> Iterator for Bytes<R> type Item = Result<u8>; where
Self: Sized,
1.0.0 · source
fn bytes(self) -> Bytes<Self>ⓘNotable traits for Bytes<R>impl<R: Read> Iterator for Bytes<R> type Item = Result<u8>; where
Self: Sized,
1.0.0 · sourceimpl<'a> Read for &'a UnixStream
source
impl<'a> Read for &'a UnixStream
sourcefn read(&mut self, buf: &mut [u8]) -> Result<usize>
source
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
sourcePull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>
source
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>
sourceLike read, except that it reads into a slice of buffers. Read more
fn is_read_vectored(&self) -> bool
source
fn is_read_vectored(&self) -> bool
sourceDetermines if this Reader has an efficient read_vectored
implementation. Read more
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>
1.0.0 · source
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>
1.0.0 · sourceRead all bytes until EOF in this source, placing them into buf. Read more
fn read_to_string(&mut self, buf: &mut String) -> Result<usize>
1.0.0 · source
fn read_to_string(&mut self, buf: &mut String) -> Result<usize>
1.0.0 · sourceRead all bytes until EOF in this source, appending them to buf. Read more
fn read_exact(&mut self, buf: &mut [u8]) -> Result<()>
1.6.0 · source
fn read_exact(&mut self, buf: &mut [u8]) -> Result<()>
1.6.0 · sourceRead the exact number of bytes required to fill buf. Read more
fn read_buf(&mut self, buf: &mut ReadBuf<'_>) -> Result<()>
source
fn read_buf(&mut self, buf: &mut ReadBuf<'_>) -> Result<()>
sourcePull some bytes from this source into the specified buffer. Read more
fn read_buf_exact(&mut self, buf: &mut ReadBuf<'_>) -> Result<()>
source
fn read_buf_exact(&mut self, buf: &mut ReadBuf<'_>) -> Result<()>
sourceRead the exact number of bytes required to fill buf. Read more
fn by_ref(&mut self) -> &mut Self where
Self: Sized,
1.0.0 · source
fn by_ref(&mut self) -> &mut Self where
Self: Sized,
1.0.0 · sourceCreates a “by reference” adaptor for this instance of Read. Read more
fn bytes(self) -> Bytes<Self>ⓘNotable traits for Bytes<R>impl<R: Read> Iterator for Bytes<R> type Item = Result<u8>; where
Self: Sized,
1.0.0 · source
fn bytes(self) -> Bytes<Self>ⓘNotable traits for Bytes<R>impl<R: Read> Iterator for Bytes<R> type Item = Result<u8>; where
Self: Sized,
1.0.0 · sourceimpl Write for UnixStream
source
impl Write for UnixStream
sourcefn write(&mut self, buf: &[u8]) -> Result<usize>
source
fn write(&mut self, buf: &[u8]) -> Result<usize>
sourceWrite a buffer into this writer, returning how many bytes were written. Read more
fn is_write_vectored(&self) -> bool
source
fn is_write_vectored(&self) -> bool
sourceDetermines if this Writer has an efficient write_vectored
implementation. Read more
fn flush(&mut self) -> Result<()>
source
fn flush(&mut self) -> Result<()>
sourceFlush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
fn write_all(&mut self, buf: &[u8]) -> Result<()>
1.0.0 · source
fn write_all(&mut self, buf: &[u8]) -> Result<()>
1.0.0 · sourceAttempts to write an entire buffer into this writer. Read more
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<()>
source
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<()>
sourceAttempts to write multiple buffers into this writer. Read more
impl<'a> Write for &'a UnixStream
source
impl<'a> Write for &'a UnixStream
sourcefn write(&mut self, buf: &[u8]) -> Result<usize>
source
fn write(&mut self, buf: &[u8]) -> Result<usize>
sourceWrite a buffer into this writer, returning how many bytes were written. Read more
fn is_write_vectored(&self) -> bool
source
fn is_write_vectored(&self) -> bool
sourceDetermines if this Writer has an efficient write_vectored
implementation. Read more
fn flush(&mut self) -> Result<()>
source
fn flush(&mut self) -> Result<()>
sourceFlush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
fn write_all(&mut self, buf: &[u8]) -> Result<()>
1.0.0 · source
fn write_all(&mut self, buf: &[u8]) -> Result<()>
1.0.0 · sourceAttempts to write an entire buffer into this writer. Read more
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<()>
source
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<()>
sourceAttempts to write multiple buffers into this writer. Read more
Auto Trait Implementations
impl RefUnwindSafe for UnixStream
impl Send for UnixStream
impl Sync for UnixStream
impl Unpin for UnixStream
impl UnwindSafe for UnixStream
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
source
impl<T> BorrowMut<T> for T where
T: ?Sized,
sourcefn borrow_mut(&mut self) -> &mut T
const: unstable · source
fn borrow_mut(&mut self) -> &mut T
const: unstable · sourceMutably borrows from an owned value. Read more