win_uds 0.2.2

Windows Unix Domain Socket
Documentation
use std::io::{self, Read, Write};
use std::thread;
use std::time::Duration;
use win_uds::net::{UnixListener, UnixStream};

#[test]
fn read_time_out() {
    let tmp = std::env::temp_dir();
    let path = tmp.join("read_time_out.sock");
    let _ = std::fs::remove_file(&path);

    let listener = UnixListener::bind(&path).unwrap();
    let srv = std::thread::spawn(move || {
        let (mut stream, _) = listener.accept().unwrap();
        stream
            .set_read_timeout(Some(Duration::from_secs(1)))
            .unwrap();
        let mut buf = [0u8; 128];
        assert!(stream.read(&mut buf).is_err());
    });
    let path_clone = path.clone();
    let cli = std::thread::spawn(move || {
        let mut _stream = UnixStream::connect(&path_clone).unwrap();
        thread::sleep(Duration::from_secs(3));
    });
    cli.join().unwrap();
    srv.join().unwrap();
    let _ = std::fs::remove_file(&path);
}

#[test]
fn write_time_out() {
    let tmp = std::env::temp_dir();
    let path = tmp.join("write_time_out.sock");
    let _ = std::fs::remove_file(&path);

    let listener = UnixListener::bind(&path).unwrap();
    let srv = std::thread::spawn(move || {
        let (mut stream, _) = listener.accept().unwrap();
        let buf = vec![b'X'; 1024 * 1024];
        stream
            .set_write_timeout(Some(Duration::from_secs(1)))
            .unwrap();
        loop {
            match stream.write(buf.as_slice()) {
                Ok(_n) => continue,
                Err(e) => {
                    if e.kind() == io::ErrorKind::TimedOut {
                        break;
                    } else {
                        panic!("Expected TimedOut");
                    }
                }
            }
        }
    });

    let path_clone = path.clone();
    let cli = std::thread::spawn(move || {
        let mut _stream = UnixStream::connect(&path_clone).unwrap();
        std::thread::sleep(Duration::from_secs(3))
    });

    cli.join().unwrap();
    srv.join().unwrap();
    let _ = std::fs::remove_file(&path);
}