pub unsafe trait SocketAddrArg {
// Required method
unsafe fn with_sockaddr<R>(
&self,
f: impl FnOnce(*const SocketAddrOpaque, SocketAddrLen) -> R,
) -> R;
// Provided methods
fn as_any(&self) -> SocketAddrAny { ... }
unsafe fn write_sockaddr(
&self,
storage: *mut SocketAddrStorage,
) -> SocketAddrLen { ... }
}
Expand description
A trait abstracting over the types that can be passed as a sockaddr
.
§Safety
Implementers of this trait must ensure that with_sockaddr
calls f
with
a pointer that is readable for the passed length, and points to data that
is a valid socket address for the system calls that accept sockaddr
as a
const pointer.
Required Methods§
Sourceunsafe fn with_sockaddr<R>(
&self,
f: impl FnOnce(*const SocketAddrOpaque, SocketAddrLen) -> R,
) -> R
unsafe fn with_sockaddr<R>( &self, f: impl FnOnce(*const SocketAddrOpaque, SocketAddrLen) -> R, ) -> R
Call a closure with the pointer and length to the corresponding C type.
The memory pointed to by the pointer of size length is guaranteed to be valid only for the duration of the call.
The API uses a closure so that:
- The libc types are not exposed in the rustix API.
- Types like
SocketAddrUnix
that contain their corresponding C type can pass it directly without a copy. - Other socket types can construct their C-compatible struct on the stack and call the closure with a pointer to it.
§Safety
For f
to use its pointer argument, it’ll contain an unsafe
block.
The caller of with_sockaddr
here is responsible for ensuring that the
safety condition for that unsafe
block is satisfied by the guarantee
that with_sockaddr
here provides.
Provided Methods§
Sourcefn as_any(&self) -> SocketAddrAny
fn as_any(&self) -> SocketAddrAny
Convert to SocketAddrAny
.
Sourceunsafe fn write_sockaddr(
&self,
storage: *mut SocketAddrStorage,
) -> SocketAddrLen
unsafe fn write_sockaddr( &self, storage: *mut SocketAddrStorage, ) -> SocketAddrLen
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementors§
impl SocketAddrArg for SocketAddr
impl SocketAddrArg for SocketAddrNetlink
linux_kernel
only.