extern crate psocket;
use psocket::TcpSocket;
use std::io::prelude::*;
use std::time::{Duration, Instant};
use std::io::ErrorKind;
fn main() {
let listener = TcpSocket::bind("127.0.0.1:1234").unwrap();
let addr = listener.local_addr().unwrap();
let mut stream = TcpSocket::connect(&("localhost", addr.port())).expect("connect error");
stream.set_read_timeout(Some(Duration::from_millis(1000))).expect("set read timeout error");
let mut other_end = listener.accept().unwrap().0;
other_end.write_all(b"hello world").expect("write error");
let mut buf = [0; 11];
stream.read(&mut buf).expect("read error");
assert_eq!(b"hello world", &buf[..]);
let start = Instant::now();
let kind = stream.read(&mut buf).err().expect("expected error").kind();
assert!(kind == ErrorKind::WouldBlock || kind == ErrorKind::TimedOut);
assert!(start.elapsed() > Duration::from_millis(400));
drop(listener);
}