pub trait DatagramBoundStateContext<I: IpExt + DualStackIpExt, BC, S: DatagramSocketSpec>: DeviceIdContext<AnyDevice> {
type IpSocketsCtx<'a>: TransportIpContext<I, BC> + MulticastMembershipHandler<I, BC> + DeviceIdContext<AnyDevice, DeviceId = Self::DeviceId, WeakDeviceId = Self::WeakDeviceId>;
type DualStackContext: DualStackDatagramBoundStateContext<I, BC, S, DeviceId = Self::DeviceId, WeakDeviceId = Self::WeakDeviceId>;
type NonDualStackContext: NonDualStackDatagramBoundStateContext<I, BC, S, DeviceId = Self::DeviceId, WeakDeviceId = Self::WeakDeviceId>;
// Required methods
fn with_bound_sockets<O, F: FnOnce(&mut Self::IpSocketsCtx<'_>, &BoundSockets<I, <Self as DeviceIdContext<AnyDevice>>::WeakDeviceId, <S as DatagramSocketSpec>::AddrSpec, <S as DatagramSocketSpec>::SocketMapSpec<I, <Self as DeviceIdContext<AnyDevice>>::WeakDeviceId>>) -> O>(
&mut self,
cb: F,
) -> O;
fn with_bound_sockets_mut<O, F: FnOnce(&mut Self::IpSocketsCtx<'_>, &mut BoundSockets<I, <Self as DeviceIdContext<AnyDevice>>::WeakDeviceId, <S as DatagramSocketSpec>::AddrSpec, <S as DatagramSocketSpec>::SocketMapSpec<I, <Self as DeviceIdContext<AnyDevice>>::WeakDeviceId>>) -> O>(
&mut self,
cb: F,
) -> O;
fn dual_stack_context(
&mut self,
) -> MaybeDualStack<&mut Self::DualStackContext, &mut Self::NonDualStackContext>;
fn with_transport_context<O, F: FnOnce(&mut Self::IpSocketsCtx<'_>) -> O>(
&mut self,
cb: F,
) -> O;
}
Expand description
The core context providing access to bound datagram sockets.
Required Associated Types§
Sourcetype IpSocketsCtx<'a>: TransportIpContext<I, BC> + MulticastMembershipHandler<I, BC> + DeviceIdContext<AnyDevice, DeviceId = Self::DeviceId, WeakDeviceId = Self::WeakDeviceId>
type IpSocketsCtx<'a>: TransportIpContext<I, BC> + MulticastMembershipHandler<I, BC> + DeviceIdContext<AnyDevice, DeviceId = Self::DeviceId, WeakDeviceId = Self::WeakDeviceId>
The core context passed to the callback provided to methods.
Sourcetype DualStackContext: DualStackDatagramBoundStateContext<I, BC, S, DeviceId = Self::DeviceId, WeakDeviceId = Self::WeakDeviceId>
type DualStackContext: DualStackDatagramBoundStateContext<I, BC, S, DeviceId = Self::DeviceId, WeakDeviceId = Self::WeakDeviceId>
Context for dual-stack socket state access.
This type type provides access, via an implementation of the
DualStackDatagramBoundStateContext
trait, to state necessary for
implementing dual-stack socket operations. While a type must always be
provided, implementations of DatagramBoundStateContext
for socket
types that don’t support dual-stack operation (like ICMP and raw IP
sockets, and UDPv4) can use the [UninstantiableDualStackContext
] type,
which is uninstantiable.
Sourcetype NonDualStackContext: NonDualStackDatagramBoundStateContext<I, BC, S, DeviceId = Self::DeviceId, WeakDeviceId = Self::WeakDeviceId>
type NonDualStackContext: NonDualStackDatagramBoundStateContext<I, BC, S, DeviceId = Self::DeviceId, WeakDeviceId = Self::WeakDeviceId>
Context for single-stack socket access.
This type provides access, via an implementation of the
NonDualStackDatagramBoundStateContext
trait, to functionality
necessary to implement sockets that do not support dual-stack operation.
Required Methods§
Sourcefn with_bound_sockets<O, F: FnOnce(&mut Self::IpSocketsCtx<'_>, &BoundSockets<I, <Self as DeviceIdContext<AnyDevice>>::WeakDeviceId, <S as DatagramSocketSpec>::AddrSpec, <S as DatagramSocketSpec>::SocketMapSpec<I, <Self as DeviceIdContext<AnyDevice>>::WeakDeviceId>>) -> O>(
&mut self,
cb: F,
) -> O
fn with_bound_sockets<O, F: FnOnce(&mut Self::IpSocketsCtx<'_>, &BoundSockets<I, <Self as DeviceIdContext<AnyDevice>>::WeakDeviceId, <S as DatagramSocketSpec>::AddrSpec, <S as DatagramSocketSpec>::SocketMapSpec<I, <Self as DeviceIdContext<AnyDevice>>::WeakDeviceId>>) -> O>( &mut self, cb: F, ) -> O
Calls the function with an immutable reference to the datagram sockets.
Sourcefn with_bound_sockets_mut<O, F: FnOnce(&mut Self::IpSocketsCtx<'_>, &mut BoundSockets<I, <Self as DeviceIdContext<AnyDevice>>::WeakDeviceId, <S as DatagramSocketSpec>::AddrSpec, <S as DatagramSocketSpec>::SocketMapSpec<I, <Self as DeviceIdContext<AnyDevice>>::WeakDeviceId>>) -> O>(
&mut self,
cb: F,
) -> O
fn with_bound_sockets_mut<O, F: FnOnce(&mut Self::IpSocketsCtx<'_>, &mut BoundSockets<I, <Self as DeviceIdContext<AnyDevice>>::WeakDeviceId, <S as DatagramSocketSpec>::AddrSpec, <S as DatagramSocketSpec>::SocketMapSpec<I, <Self as DeviceIdContext<AnyDevice>>::WeakDeviceId>>) -> O>( &mut self, cb: F, ) -> O
Calls the function with a mutable reference to the datagram sockets.
Sourcefn dual_stack_context(
&mut self,
) -> MaybeDualStack<&mut Self::DualStackContext, &mut Self::NonDualStackContext>
fn dual_stack_context( &mut self, ) -> MaybeDualStack<&mut Self::DualStackContext, &mut Self::NonDualStackContext>
Provides access to either the dual-stack or non-dual-stack context.
For socket types that don’t support dual-stack operation (like ICMP,
raw IP sockets, and UDPv4), this method should always return a reference
to the non-dual-stack context to allow the caller to access
non-dual-stack state. Otherwise it should provide an instance of the
DualStackContext
, which can be used by the caller to access dual-stack
state.
Sourcefn with_transport_context<O, F: FnOnce(&mut Self::IpSocketsCtx<'_>) -> O>(
&mut self,
cb: F,
) -> O
fn with_transport_context<O, F: FnOnce(&mut Self::IpSocketsCtx<'_>) -> O>( &mut self, cb: F, ) -> O
Calls the function with only the inner context.
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.