Struct UdStream

Source
pub struct UdStream { /* private fields */ }
Available on Unix only.
Expand description

A Unix domain socket byte stream, obtained either from UdStreamListener or by connecting to an existing server.

§Examples

Basic example:

use interprocess::os::unix::udsocket::UdStream;
use std::io::prelude::*;

let mut conn = UdStream::connect("/tmp/example1.sock")?;
conn.write_all(b"Hello from client!")?;
let mut string_buffer = String::new();
conn.read_to_string(&mut string_buffer)?;
println!("Server answered: {}", string_buffer);

Implementations§

Source§

impl UdStream

Source

pub fn connect<'a>(path: impl ToUdSocketPath<'a>) -> Result<Self>

Connects to a Unix domain socket server at the specified path.

See ToUdSocketPath for an example of using various string types to specify socket paths.

§System calls
  • socket
  • connect
Source

pub fn recv(&self, buf: &mut [u8]) -> Result<usize>

Receives bytes from the socket stream.

§System calls
  • read
Source

pub fn recv_vectored(&self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>

Receives bytes from the socket stream, making use of scatter input for the main data.

§System calls
  • readv
Source

pub fn recv_ancillary<'a: 'b, 'b>( &self, buf: &mut [u8], abuf: &'b mut AncillaryDataBuf<'a>, ) -> Result<(usize, usize)>

Receives both bytes and ancillary data from the socket stream.

The ancillary data buffer is automatically converted from the supplied value, if possible. For that reason, mutable slices of bytes (u8 values) can be passed directly.

§System calls
  • recvmsg
Source

pub fn recv_ancillary_vectored<'a: 'b, 'b>( &self, bufs: &mut [IoSliceMut<'_>], abuf: &'b mut AncillaryDataBuf<'a>, ) -> Result<(usize, usize)>

Receives bytes and ancillary data from the socket stream, making use of scatter input for the main data.

The ancillary data buffer is automatically converted from the supplied value, if possible. For that reason, mutable slices of bytes (u8 values) can be passed directly.

§System calls
  • recvmsg
Source

pub fn send(&self, buf: &[u8]) -> Result<usize>

Sends bytes into the socket stream.

§System calls
  • write
Source

pub fn send_vectored(&self, bufs: &[IoSlice<'_>]) -> Result<usize>

Sends bytes into the socket stream, making use of gather output for the main data.

§System calls
  • senv
Source

pub fn send_ancillary<'a>( &self, buf: &[u8], ancillary_data: impl IntoIterator<Item = AncillaryData<'a>>, ) -> Result<(usize, usize)>

Sends bytes and ancillary data into the socket stream.

The ancillary data buffer is automatically converted from the supplied value, if possible. For that reason, slices and Vecs of AncillaryData can be passed directly.

§System calls
  • sendmsg
Source

pub fn send_ancillary_vectored<'a>( &self, bufs: &[IoSlice<'_>], ancillary_data: impl IntoIterator<Item = AncillaryData<'a>>, ) -> Result<(usize, usize)>

Sends bytes and ancillary data into the socket stream, making use of gather output for the main data.

The ancillary data buffer is automatically converted from the supplied value, if possible. For that reason, slices and Vecs of AncillaryData can be passed directly.

§System calls
  • sendmsg
Source

pub fn shutdown(&self, how: Shutdown) -> Result<()>

Shuts down the read, write, or both halves of the stream. See Shutdown.

Attempting to call this method with the same how argument multiple times may return Ok(()) every time or it may return an error the second time it is called, depending on the platform. You must either avoid using the same value twice or ignore the error entirely.

Source

pub fn set_nonblocking(&self, nonblocking: bool) -> Result<()>

Enables or disables the nonblocking mode for the stream. By default, it is disabled.

In nonblocking mode, calls to the recv… methods and the Read trait methods will never wait for at least one byte of data to become available; calls to send… methods and the Write trait methods will never wait for the other side to remove enough bytes from the buffer for the write operation to be performed. Those operations will instead return a WouldBlock error immediately, allowing the thread to perform other useful operations in the meantime.

Source

pub fn is_nonblocking(&self) -> Result<bool>

Checks whether the stream is currently in nonblocking mode or not.

Source

pub fn get_peer_credentials(&self) -> Result<ucred>

Available on Linux and (GNU or musl or target_env="musleabi" or target_env="musleabihf"), or Emscripten, or Redox, or Haiku only.

Fetches the credentials of the other end of the connection without using ancillary data. The returned structure contains the process identifier, user identifier and group identifier of the peer.

Trait Implementations§

Source§

impl AsRawFd for UdStream

Source§

fn as_raw_fd(&self) -> c_int

Extracts the raw file descriptor. Read more
Source§

impl Debug for UdStream

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromRawFd for UdStream

Source§

unsafe fn from_raw_fd(fd: c_int) -> Self

Constructs a new instance of Self from the given raw file descriptor. Read more
Source§

impl IntoRawFd for UdStream

Source§

fn into_raw_fd(self) -> c_int

Consumes this object, returning the raw underlying file descriptor. Read more
Source§

impl Read for UdStream

Source§

fn read(&mut self, buf: &mut [u8]) -> Result<usize>

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
Source§

fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>

Like read, except that it reads into a slice of buffers. Read more
Source§

fn is_read_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Reader has an efficient read_vectored implementation. Read more
1.0.0 · Source§

fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>

Reads all bytes until EOF in this source, placing them into buf. Read more
1.0.0 · Source§

fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>

Reads all bytes until EOF in this source, appending them to buf. Read more
1.6.0 · Source§

fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

Reads the exact number of bytes required to fill buf. Read more
Source§

fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Pull some bytes from this source into the specified buffer. Read more
Source§

fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Reads the exact number of bytes required to fill cursor. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adaptor for this instance of Read. Read more
1.0.0 · Source§

fn bytes(self) -> Bytes<Self>
where Self: Sized,

Transforms this Read instance to an Iterator over its bytes. Read more
1.0.0 · Source§

fn chain<R>(self, next: R) -> Chain<Self, R>
where R: Read, Self: Sized,

Creates an adapter which will chain this stream with another. Read more
1.0.0 · Source§

fn take(self, limit: u64) -> Take<Self>
where Self: Sized,

Creates an adapter which will read at most limit bytes from it. Read more
Source§

impl TryFrom<UdStream> for UdStream

Available on crate feature tokio_support only.
Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(x: UdStream) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl TryFrom<UdStream> for UdStream

Available on crate feature tokio_support only.
Source§

type Error = Error

The type returned in the event of a conversion error.
Source§

fn try_from(sync: SyncUdStream) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl Write for UdStream

Source§

fn write(&mut self, buf: &[u8]) -> Result<usize>

Writes a buffer into this writer, returning how many bytes were written. Read more
Source§

fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize>

Like write, except that it writes from a slice of buffers. Read more
Source§

fn flush(&mut self) -> Result<()>

Flushes this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
Source§

fn is_write_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Writer has an efficient write_vectored implementation. Read more
1.0.0 · Source§

fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

Attempts to write an entire buffer into this writer. Read more
Source§

fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>

🔬This is a nightly-only experimental API. (write_all_vectored)
Attempts to write multiple buffers into this writer. Read more
1.0.0 · Source§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Writes a formatted string into this writer, returning any error encountered. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Write. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> To for T
where T: ?Sized,

Source§

fn to<T>(self) -> T
where Self: Into<T>,

Converts to T by calling Into<T>::into.
Source§

fn try_to<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Tries to convert to T by calling TryInto<T>::try_into.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.