use std::{
io::{self},
net::SocketAddr,
};
use crate::{
packet::{Packet, PacketBufPool},
udp::{UdpRecv, UdpSend},
};
impl UdpSend for super::UdpSocket {
type SendManyBuf = ();
async fn send_to(&self, packet: Packet, target: SocketAddr) -> io::Result<()> {
self.inner.send_to(&packet, target).await?;
Ok(())
}
fn local_addr(&self) -> io::Result<Option<SocketAddr>> {
super::UdpSocket::local_addr(self).map(Some)
}
}
impl UdpRecv for super::UdpSocket {
type RecvManyBuf = ();
async fn recv_from(&mut self, pool: &mut PacketBufPool) -> io::Result<(Packet, SocketAddr)> {
let mut buf = pool.get();
let (n, src) = self.inner.recv_from(&mut buf).await?;
buf.truncate(n);
Ok((buf, src))
}
}