This started from a copy of UdpFramed
from tokio-util
with a few modifications that provides a somewhat different API:
UdpFramed
types take a Borrow<UdpSocket>
so you can pass an Arc<UdpSocket>
or &UdpSocket
UpdFramedRecv
and UdpFramedSend
types for specifically send
and recv
in Sink
/Stream
Borrow<UdpSocket>
you can't use get_mut
anymoreThe main benefit can be easily explained in an example:
```rust let asoc = Arc::new(UdpSocket::bind("127.0.0.1:0").await?); let bsoc = a_soc.clone();
let aaddr = asoc.localaddr()?; let baddr = bsoc.localaddr()?;
let mut a = UdpFramed::new(asoc, ByteCodec); let mut b = UdpFramed::new(bsoc, LinesCodec::new());
let msg = b"1\r\n2\r\n3\r\n".tovec(); a.send((&msg, baddr)).await?;
let msg = b"4\r\n5\r\n6\r\n".tovec(); a.send((&msg, baddr)).await?;
asserteq!(b.next().await.unwrap().unwrap(), ("1".tostring(), aaddr)); asserteq!(b.next().await.unwrap().unwrap(), ("2".tostring(), aaddr)); asserteq!(b.next().await.unwrap().unwrap(), ("3".tostring(), a_addr));
asserteq!(b.next().await.unwrap().unwrap(), ("4".tostring(), aaddr)); asserteq!(b.next().await.unwrap().unwrap(), ("5".tostring(), aaddr)); asserteq!(b.next().await.unwrap().unwrap(), ("6".tostring(), a_addr)); ```