blob: 7e19d54b3e3f74c6f8da2ccc671139c5c26ade5a [file] [log] [blame]
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);
}