use crate::mio_uds_windows::{UnixListener, UnixStream};
use mio::{Events, Poll, PollOpt, Ready, Token};
use tempdir::TempDir;
use TryWrite;
const LISTEN: Token = Token(0);
const CLIENT: Token = Token(1);
const SERVER: Token = Token(2);
struct MyHandler {
listener: UnixListener,
connected: UnixStream,
accepted: Option<UnixStream>,
shutdown: bool,
}
#[test]
fn local_addr_ready() {
let dir = TempDir::new("uds").unwrap();
let server = UnixListener::bind(dir.path().join("foo")).unwrap();
let addr = server.local_addr().unwrap();
let poll = Poll::new().unwrap();
poll.register(&server, LISTEN, Ready::readable(), PollOpt::edge())
.unwrap();
let sock = UnixStream::connect(&addr.as_pathname().unwrap()).unwrap();
poll.register(&sock, CLIENT, Ready::readable(), PollOpt::edge())
.unwrap();
let mut events = Events::with_capacity(1024);
let mut handler = MyHandler {
listener: server,
connected: sock,
accepted: None,
shutdown: false,
};
while !handler.shutdown {
poll.poll(&mut events, None).unwrap();
for event in &events {
match event.token() {
LISTEN => {
let sock = handler.listener.accept().unwrap().unwrap().0;
poll.register(&sock, SERVER, Ready::writable(), PollOpt::edge())
.unwrap();
handler.accepted = Some(sock);
}
SERVER => {
handler.accepted.as_ref().unwrap().peer_addr().unwrap();
handler.accepted.as_ref().unwrap().local_addr().unwrap();
handler
.accepted
.as_mut()
.unwrap()
.try_write(&[1, 2, 3])
.unwrap();
handler.accepted = None;
}
CLIENT => {
handler.connected.peer_addr().unwrap();
handler.connected.local_addr().unwrap();
handler.shutdown = true;
}
_ => panic!("unexpected token"),
}
}
}
}