1 unstable release
0.1.0 | Feb 18, 2021 |
---|
#158 in #udp
25KB
493 lines
tokio-udp-framed
This started from a copy of UdpFramed
from tokio-util
with a few modifications that provides a somewhat different API:
- All
UdpFramed
types take aBorrow<UdpSocket>
so you can pass anArc<UdpSocket>
or&UdpSocket
- There are
UpdFramedRecv
andUdpFramedSend
types for specificallysend
andrecv
inSink
/Stream
- Because of
Borrow<UdpSocket>
you can't useget_mut
anymore
The main benefit can be easily explained in an example:
let a_soc = Arc::new(UdpSocket::bind("127.0.0.1:0").await?);
let b_soc = a_soc.clone();
let a_addr = a_soc.local_addr()?;
let b_addr = b_soc.local_addr()?;
let mut a = UdpFramed::new(a_soc, ByteCodec);
let mut b = UdpFramed::new(b_soc, LinesCodec::new());
let msg = b"1\r\n2\r\n3\r\n".to_vec();
a.send((&msg, b_addr)).await?;
let msg = b"4\r\n5\r\n6\r\n".to_vec();
a.send((&msg, b_addr)).await?;
assert_eq!(b.next().await.unwrap().unwrap(), ("1".to_string(), a_addr));
assert_eq!(b.next().await.unwrap().unwrap(), ("2".to_string(), a_addr));
assert_eq!(b.next().await.unwrap().unwrap(), ("3".to_string(), a_addr));
assert_eq!(b.next().await.unwrap().unwrap(), ("4".to_string(), a_addr));
assert_eq!(b.next().await.unwrap().unwrap(), ("5".to_string(), a_addr));
assert_eq!(b.next().await.unwrap().unwrap(), ("6".to_string(), a_addr));
Dependencies
~2.7–8.5MB
~63K SLoC