Struct UnixFd

Source
pub struct UnixFd(/* private fields */);
Expand description

UnixFd is a wrapper around RawFd, to ensure that opened FDs are closed again, while still having the possibility of having multiple references to it.

“Ownership” as in responsibility of closing the FD works as follows:

  1. You can call take_raw_fd(). At this point UnixFd releases ownership. You are now responsible of closing the FD.
  2. You can call get_raw_fd(). This will not release ownership, UnixFd will still close it if no more references to it exist.

§UnixFds and messages

  1. When a UnixFd is marshalled rustbus will dup() the FD so that the message and the original UnixFd do not depend on each others lifetime. You are free to use or close the original one.
  2. When a UnixFd is unmarshalled rustbus will NOT dup() the FD. This means if you call take_raw_fd(), it is gone from the message too! If you do not want this, you have to call dup() and then get_raw_fd() or take_raw_fd()

Implementations§

Source§

impl UnixFd

Source

pub fn new(fd: i32) -> UnixFd

Source

pub fn get_raw_fd(&self) -> Option<i32>

Gets a non-owning RawFd. If None is returned. then this UnixFd has already been taken by somebody else and is no longer valid.

Source

pub fn take_raw_fd(self) -> Option<i32>

Gets a owning RawFd from the UnixFd. Subsequent attempt to get the RawFd from other UnixFd referencing the same file descriptor will fail.

Source

pub fn dup(&self) -> Result<UnixFd, DupError>

Duplicate the underlying FD so you can use it as you will. This is different from just calling clone(). Clone only makes a new ref to the same underlying FD.

Trait Implementations§

Source§

impl Clone for UnixFd

Source§

fn clone(&self) -> UnixFd

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for UnixFd

Source§

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

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

impl Hash for UnixFd

Source§

fn hash<H>(&self, state: &mut H)
where H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Marshal for UnixFd

Source§

fn marshal(&self, ctx: &mut MarshalContext<'_, '_>) -> Result<(), Error>

Source§

fn marshal_as_variant( &self, ctx: &mut MarshalContext<'_, '_>, ) -> Result<(), Error>

Source§

impl PartialEq for UnixFd

Allow for the comparison of UnixFd even after the RawFd has been taken, to see if they originally referred to the same thing.

Source§

fn eq(&self, other: &UnixFd) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Signature for UnixFd

Source§

fn signature() -> Type

Source§

fn alignment() -> usize

Source§

fn sig_str(s_buf: &mut SignatureBuffer)

Appends the signature of the type to the SignatureBuffer. Read more
Source§

fn has_sig(sig: &str) -> bool

Check if this type fulfills this signature. This may expect to only be called with valid signatures. But it might be called with the wrong signature. This means for example you must check the length before indexing. Read more
Source§

unsafe fn valid_slice(_bo: ByteOrder) -> bool

If this returns true, it indicates that for implementing type T, Rust’s [T] is identical to DBus’s array format and can be copied into a message after aligning the first element. Read more
Source§

impl<'buf, 'fds> Unmarshal<'buf, 'fds> for UnixFd

Source§

fn unmarshal( ctx: &mut UnmarshalContext<'fds, 'buf>, ) -> Result<(usize, UnixFd), Error>

Source§

impl Eq for UnixFd

Auto Trait Implementations§

§

impl Freeze for UnixFd

§

impl RefUnwindSafe for UnixFd

§

impl Send for UnixFd

§

impl Sync for UnixFd

§

impl Unpin for UnixFd

§

impl UnwindSafe for UnixFd

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.