pub trait AsyncUdpSocket:
Send
+ Sync
+ Debug
+ 'static {
// Required methods
fn create_io_poller(self: Arc<Self>) -> Pin<Box<dyn UdpPoller>>;
fn try_send(&self, transmit: &Transmit<'_>) -> Result<()>;
fn poll_recv(
&self,
cx: &mut Context<'_>,
bufs: &mut [IoSliceMut<'_>],
meta: &mut [RecvMeta],
) -> Poll<Result<usize>>;
fn local_addr(&self) -> Result<SocketAddr>;
// Provided methods
fn max_transmit_segments(&self) -> usize { ... }
fn max_receive_segments(&self) -> usize { ... }
fn may_fragment(&self) -> bool { ... }
}展开描述
UDP 套接字的抽象实现,用于运行时无关性
必需方法§
源代码fn try_send(&self, transmit: &Transmit<'_>) -> Result<()>
fn try_send(&self, transmit: &Transmit<'_>) -> Result<()>
从 transmits 发送 UDP 数据报;若不能立即发送则返回 WouldBlock 并清除底层套接字的就绪状态;若出错则返回 I/O 错误
若返回 io::ErrorKind::WouldBlock,则必须调用 UdpPoller::poll_writable,以便在可以再次尝试发送时唤醒当前任务。
源代码fn poll_recv(
&self,
cx: &mut Context<'_>,
bufs: &mut [IoSliceMut<'_>],
meta: &mut [RecvMeta],
) -> Poll<Result<usize>>
fn poll_recv( &self, cx: &mut Context<'_>, bufs: &mut [IoSliceMut<'_>], meta: &mut [RecvMeta], ) -> Poll<Result<usize>>
接收 UDP 数据报,若当前无法接收则注册任务以便后续可能被唤醒
源代码fn local_addr(&self) -> Result<SocketAddr>
fn local_addr(&self) -> Result<SocketAddr>
查询该套接字所使用的本地 IP 地址与端口
提供方法§
源代码fn max_transmit_segments(&self) -> usize
fn max_transmit_segments(&self) -> usize
一个 Transmit 最多可承载的数据报数量
源代码fn max_receive_segments(&self) -> usize
fn max_receive_segments(&self) -> usize
单个 RecvMeta 最多可描述的数据报数量
源代码fn may_fragment(&self) -> bool
fn may_fragment(&self) -> bool
数据报是否可能被拆分为多个片段
为获得最佳性能,套接字应避免这种情况。可参考 IPV6_DONTFRAG 套接字选项。