use std::{io, io::prelude::*, process};
fn main() -> io::Result<()> {
let mut sources = popol::Sources::with_capacity(1);
let mut events = Vec::with_capacity(1);
sources.register((), &io::stdin(), popol::interest::READ);
match sources.poll(&mut events, popol::Timeout::from_secs(6)) {
Ok(_) => {}
Err(err) if err.kind() == io::ErrorKind::TimedOut => process::exit(1),
Err(err) => return Err(err),
}
for event in events.drain(..) {
if event.is_error() {
panic!("error on {:?}", io::stdin());
}
if event.is_readable() || event.is_hangup() {
let mut buf = [0; 1024];
match io::stdin().read(&mut buf[..]) {
Ok(n) => io::stdout().write_all(&buf[..n])?,
Err(err) => panic!("{}", err),
}
}
}
Ok(())
}