#![feature(async_await)] #![deny(warnings, rust_2018_idioms)] use tokio_udp::UdpSocket; #[tokio::test] async fn send_recv() -> std::io::Result<()> { let mut sender = UdpSocket::bind(&"127.0.0.1:0".parse().unwrap())?; let mut receiver = UdpSocket::bind(&"127.0.0.1:0".parse().unwrap())?; sender.connect(&receiver.local_addr()?)?; receiver.connect(&sender.local_addr()?)?; let message = b"hello!"; sender.send(message).await?; let mut recv_buf = [0u8; 32]; let len = receiver.recv(&mut recv_buf[..]).await?; assert_eq!(&recv_buf[..len], message); Ok(()) } #[tokio::test] async fn send_to_recv_from() -> std::io::Result<()> { let mut sender = UdpSocket::bind(&"127.0.0.1:0".parse().unwrap())?; let mut receiver = UdpSocket::bind(&"127.0.0.1:0".parse().unwrap())?; let message = b"hello!"; let receiver_addr = receiver.local_addr()?; sender.send_to(message, &receiver_addr).await?; let mut recv_buf = [0u8; 32]; let (len, addr) = receiver.recv_from(&mut recv_buf[..]).await?; assert_eq!(&recv_buf[..len], message); assert_eq!(addr, sender.local_addr()?); Ok(()) } // pub struct ByteCodec; // impl Decoder for ByteCodec { // type Item = Vec; // type Error = io::Error; // fn decode(&mut self, buf: &mut BytesMut) -> Result>, io::Error> { // let len = buf.len(); // Ok(Some(buf.split_to(len).to_vec())) // } // } // impl Encoder for ByteCodec { // type Item = Vec; // type Error = io::Error; // fn encode(&mut self, data: Vec, buf: &mut BytesMut) -> Result<(), io::Error> { // buf.reserve(data.len()); // buf.put(data); // Ok(()) // } // } // #[test] // fn send_framed() { // drop(env_logger::try_init()); // let mut a_soc = t!(UdpSocket::bind(&t!("127.0.0.1:0".parse()))); // let mut b_soc = t!(UdpSocket::bind(&t!("127.0.0.1:0".parse()))); // let a_addr = t!(a_soc.local_addr()); // let b_addr = t!(b_soc.local_addr()); // { // let a = UdpFramed::new(a_soc, ByteCodec); // let b = UdpFramed::new(b_soc, ByteCodec); // let msg = b"4567".to_vec(); // let send = a.send((msg.clone(), b_addr)); // let recv = b.into_future().map_err(|e| e.0); // let (sendt, received) = t!(send.join(recv).wait()); // let (data, addr) = received.0.unwrap(); // assert_eq!(msg, data); // assert_eq!(a_addr, addr); // a_soc = sendt.into_inner(); // b_soc = received.1.into_inner(); // } // { // let a = UdpFramed::new(a_soc, ByteCodec); // let b = UdpFramed::new(b_soc, ByteCodec); // let msg = b"".to_vec(); // let send = a.send((msg.clone(), b_addr)); // let recv = b.into_future().map_err(|e| e.0); // let received = t!(send.join(recv).wait()).1; // let (data, addr) = received.0.unwrap(); // assert_eq!(msg, data); // assert_eq!(a_addr, addr); // } // }