blob: 9204afaf688e78360b49aa648441e5f5e5fc27da [file] [log] [blame]
use localhost;
use mio::*;
use mio::net::{TcpListener, TcpStream, UdpSocket};
use std::io::ErrorKind;
#[test]
fn test_tcp_register_multiple_event_loops() {
let addr = localhost();
let listener = TcpListener::bind(&addr).unwrap();
let poll1 = Poll::new().unwrap();
poll1.register(&listener, Token(0), Ready::readable() | Ready::writable(), PollOpt::edge()).unwrap();
let poll2 = Poll::new().unwrap();
// Try registering the same socket with the initial one
let res = poll2.register(&listener, Token(0), Ready::readable() | Ready::writable(), PollOpt::edge());
assert!(res.is_err());
assert_eq!(res.unwrap_err().kind(), ErrorKind::Other);
// Try cloning the socket and registering it again
let listener2 = listener.try_clone().unwrap();
let res = poll2.register(&listener2, Token(0), Ready::readable() | Ready::writable(), PollOpt::edge());
assert!(res.is_err());
assert_eq!(res.unwrap_err().kind(), ErrorKind::Other);
// Try the stream
let stream = TcpStream::connect(&addr).unwrap();
poll1.register(&stream, Token(1), Ready::readable() | Ready::writable(), PollOpt::edge()).unwrap();
let res = poll2.register(&stream, Token(1), Ready::readable() | Ready::writable(), PollOpt::edge());
assert!(res.is_err());
assert_eq!(res.unwrap_err().kind(), ErrorKind::Other);
// Try cloning the socket and registering it again
let stream2 = stream.try_clone().unwrap();
let res = poll2.register(&stream2, Token(1), Ready::readable() | Ready::writable(), PollOpt::edge());
assert!(res.is_err());
assert_eq!(res.unwrap_err().kind(), ErrorKind::Other);
}
#[test]
fn test_udp_register_multiple_event_loops() {
let addr = localhost();
let socket = UdpSocket::bind(&addr).unwrap();
let poll1 = Poll::new().unwrap();
poll1.register(&socket, Token(0), Ready::readable() | Ready::writable(), PollOpt::edge()).unwrap();
let poll2 = Poll::new().unwrap();
// Try registering the same socket with the initial one
let res = poll2.register(&socket, Token(0), Ready::readable() | Ready::writable(), PollOpt::edge());
assert!(res.is_err());
assert_eq!(res.unwrap_err().kind(), ErrorKind::Other);
// Try cloning the socket and registering it again
let socket2 = socket.try_clone().unwrap();
let res = poll2.register(&socket2, Token(0), Ready::readable() | Ready::writable(), PollOpt::edge());
assert!(res.is_err());
assert_eq!(res.unwrap_err().kind(), ErrorKind::Other);
}