pub mod async_net; #[cfg(target_os = "windows")] pub mod listener; #[cfg(target_os = "windows")] pub mod socket; #[cfg(target_os = "windows")] pub mod stream; #[cfg(target_os = "windows")] mod util; #[cfg(target_os = "windows")] pub use listener::*; #[cfg(target_os = "windows")] pub use socket::*; #[cfg(not(target_os = "windows"))] pub use std::os::unix::net::{UnixListener, UnixStream}; #[cfg(target_os = "windows")] pub use stream::*; #[cfg(test)] mod tests { use std::io::{Read, Write}; use smol::io::{AsyncReadExt, AsyncWriteExt}; const SERVER_MESSAGE: &str = "Connection closed"; const CLIENT_MESSAGE: &str = "Hello, server!"; const BUFFER_SIZE: usize = 32; #[test] fn test_windows_listener() -> std::io::Result<()> { use crate::{UnixListener, UnixStream}; let temp = tempfile::tempdir()?; let socket = temp.path().join("socket.sock"); let listener = UnixListener::bind(&socket)?; // Server let server = std::thread::spawn(move || { let (mut stream, _) = listener.accept().unwrap(); // Read data from the client let mut buffer = [0; BUFFER_SIZE]; let bytes_read = stream.read(&mut buffer).unwrap(); let string = String::from_utf8_lossy(&buffer[..bytes_read]); assert_eq!(string, CLIENT_MESSAGE); // Send a message back to the client stream.write_all(SERVER_MESSAGE.as_bytes()).unwrap(); }); // Client let mut client = UnixStream::connect(&socket)?; // Send data to the server client.write_all(CLIENT_MESSAGE.as_bytes())?; let mut buffer = [0; BUFFER_SIZE]; // Read the response from the server let bytes_read = client.read(&mut buffer)?; let string = String::from_utf8_lossy(&buffer[..bytes_read]); assert_eq!(string, SERVER_MESSAGE); client.flush()?; server.join().unwrap(); Ok(()) } #[test] fn test_unix_listener() -> std::io::Result<()> { use crate::async_net::{UnixListener, UnixStream}; smol::block_on(async { let temp = tempfile::tempdir()?; let socket = temp.path().join("socket.sock"); let listener = UnixListener::bind(&socket)?; // Server let server = smol::spawn(async move { let (mut stream, _) = listener.accept().await.unwrap(); // Read data from the client let mut buffer = [0; BUFFER_SIZE]; let bytes_read = stream.read(&mut buffer).await.unwrap(); let string = String::from_utf8_lossy(&buffer[..bytes_read]); assert_eq!(string, CLIENT_MESSAGE); // Send a message back to the client stream.write_all(SERVER_MESSAGE.as_bytes()).await.unwrap(); }); // Client let mut client = UnixStream::connect(&socket).await?; client.write_all(CLIENT_MESSAGE.as_bytes()).await?; // Read the response from the server let mut buffer = [0; BUFFER_SIZE]; let bytes_read = client.read(&mut buffer).await?; let string = String::from_utf8_lossy(&buffer[..bytes_read]); assert_eq!(string, "Connection closed"); client.flush().await?; server.await; Ok(()) }) } }