polling/examples/two-listeners.rs

44 lines
1.1 KiB
Rust

use std::io;
use std::net::TcpListener;
use polling::{Event, Events, Poller};
fn main() -> io::Result<()> {
let l1 = TcpListener::bind("127.0.0.1:8001")?;
let l2 = TcpListener::bind("127.0.0.1:8002")?;
l1.set_nonblocking(true)?;
l2.set_nonblocking(true)?;
let poller = Poller::new()?;
unsafe {
poller.add(&l1, Event::readable(1))?;
poller.add(&l2, Event::readable(2))?;
}
println!("You can connect to the server using `nc`:");
println!(" $ nc 127.0.0.1 8001");
println!(" $ nc 127.0.0.1 8002");
let mut events = Events::new();
loop {
events.clear();
poller.wait(&mut events, None)?;
for ev in events.iter() {
match ev.key {
1 => {
println!("Accept on l1");
l1.accept()?;
poller.modify(&l1, Event::readable(1))?;
}
2 => {
println!("Accept on l2");
l2.accept()?;
poller.modify(&l2, Event::readable(2))?;
}
_ => unreachable!(),
}
}
}
}