mirror of https://github.com/smol-rs/polling
44 lines
1.1 KiB
Rust
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!(),
|
|
}
|
|
}
|
|
}
|
|
}
|