Struct SockAddrStorage

#[repr(transparent)]
pub struct SockAddrStorage { /* private fields */ }

Rust version of the sockaddr_storage type.

This type is intended to be used with with direct calls to the getsockname syscall. See the documentation of SockAddr::new for examples.

This crate defines its own sockaddr_storage type to avoid semver concerns with upgrading windows-sys.

Implementations

impl SockAddrStorage

fn zeroed() -> Self

Construct a new storage containing all zeros.

fn size_of(&self) -> socklen_t

Returns the size of this storage.

unsafe fn view_as<T>(&mut self) -> &mut T

View this type as another type.

Safety

The type T must be one of the sockaddr_* types defined by this platform.

Examples

# #[allow(dead_code)]
# #[cfg(unix)] mod unix_example {
# use core::mem::size_of;
use libc::sockaddr_storage;
use socket2::{SockAddr, SockAddrStorage, socklen_t};

fn from_sockaddr_storage(recv_address: &sockaddr_storage) -> SockAddr {
    let mut storage = SockAddrStorage::zeroed();
    let libc_address = unsafe { storage.view_as::<sockaddr_storage>() };
    *libc_address = *recv_address;
    unsafe { SockAddr::new(storage, size_of::<sockaddr_storage>() as socklen_t) }
}
# }

Trait Implementations

impl Debug for SockAddrStorage

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

Auto Trait Implementations

impl Freeze for SockAddrStorage

impl RefUnwindSafe for SockAddrStorage

impl Send for SockAddrStorage

impl Sync for SockAddrStorage

impl Unpin for SockAddrStorage

impl UnsafeUnpin for SockAddrStorage

impl UnwindSafe for SockAddrStorage

Blanket Implementations

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

fn type_id(&self) -> TypeId

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

fn borrow(&self) -> &T

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

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

impl<T> From<T> for SockAddrStorage

fn from(t: T) -> T

Returns the argument unchanged.

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

fn into(self) -> U

Calls U::from(self).

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

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

type Error = never;
fn try_from(value: U) -> Result<T, never>

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

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