| use mio::{Events, Poll, PollOpt, Ready, Token}; |
| use mio::event::Event; |
| use mio::net::UdpSocket; |
| use {expect_events, sleep_ms}; |
| |
| #[test] |
| pub fn test_udp_level_triggered() { |
| let poll = Poll::new().unwrap(); |
| let poll = &poll; |
| let mut events = Events::with_capacity(1024); |
| let events = &mut events; |
| |
| // Create the listener |
| let tx = UdpSocket::bind(&"127.0.0.1:0".parse().unwrap()).unwrap(); |
| let rx = UdpSocket::bind(&"127.0.0.1:0".parse().unwrap()).unwrap(); |
| |
| poll.register(&tx, Token(0), Ready::readable() | Ready::writable(), PollOpt::level()).unwrap(); |
| poll.register(&rx, Token(1), Ready::readable() | Ready::writable(), PollOpt::level()).unwrap(); |
| |
| |
| for _ in 0..2 { |
| expect_events(poll, events, 2, vec![ |
| Event::new(Ready::writable(), Token(0)), |
| Event::new(Ready::writable(), Token(1)), |
| ]); |
| } |
| |
| tx.send_to(b"hello world!", &rx.local_addr().unwrap()).unwrap(); |
| |
| sleep_ms(250); |
| |
| for _ in 0..2 { |
| expect_events(poll, events, 2, vec![ |
| Event::new(Ready::readable() | Ready::writable(), Token(1)) |
| ]); |
| } |
| |
| let mut buf = [0; 200]; |
| while rx.recv_from(&mut buf).is_ok() {} |
| |
| for _ in 0..2 { |
| expect_events(poll, events, 4, vec![Event::new(Ready::writable(), Token(1))]); |
| } |
| |
| tx.send_to(b"hello world!", &rx.local_addr().unwrap()).unwrap(); |
| sleep_ms(250); |
| |
| expect_events(poll, events, 10, |
| vec![Event::new(Ready::readable() | Ready::writable(), Token(1))]); |
| |
| drop(rx); |
| } |