use mio::{Events, Poll, Interest, Token};
use mio::net::TcpStream;
use std::net::SocketAddr;
use std::time::{Duration, Instant};
let mut poll = Poll::new()?;
let address: SocketAddr = "127.0.0.1:0".parse()?;
let listener = net::TcpListener::bind(address)?;
let mut socket = TcpStream::connect(listener.local_addr()?)?;
let address2: SocketAddr = "127.0.0.1:0".parse()?;
let listener2 = net::TcpListener::bind(address2)?;
let mut socket2 = TcpStream::connect(listener2.local_addr()?)?;
// Register the first socket with `poll`
poll.registry().register(
&mut socket,
Token(0), // zeroth socket
Interest::READABLE | Interest::WRITABLE)?;
// Register the second socket with `poll`
poll.registry().register(
&mut socket2,
Token(1), // first socket
Interest::READABLE | Interest::WRITABLE)?;
let mut events = Events::with_capacity(1024);
let start = Instant::now();
let timeout = Duration::from_millis(500);
loop {
let elapsed = start.elapsed();
if elapsed >= timeout {
// Connection timed out
return Ok(());
}
let remaining = timeout - elapsed;
poll.poll(&mut events, Some(remaining))?;
for event in &events {
if event.token() == Token(0) {
// Event received on socket 0
continue;
} else if event.token() == Token(1) {
// Event received on socket 1
continue;
}
}
}
I want to establish an event loop that polls multiple sockets. I need to know if this is possible using MIO. Ideally, MIO would poll the Poll
, and thereafter, return events from each.