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.