123456789101112131415161718192021222324252627282930313233343536373839404142 |
- use std::io::{Error, Read, Write};
- use std::os::unix::net::{UnixListener, UnixStream};
- use std::thread;
- use std::{fs, str};
- const SOCKET_PATH: &str = "/test.socket";
- const MSG: &str = "Hello, unix stream socket!";
- fn client() -> std::io::Result<()> {
- // 连接到服务器
- let mut stream = UnixStream::connect(SOCKET_PATH)?;
- // 发送消息到服务器
- stream.write_all(MSG.as_bytes())?;
- Ok(())
- }
- pub fn test_unix_stream() -> std::io::Result<()> {
- println!("unix stream socket path: {}", SOCKET_PATH);
- // 删除可能已存在的socket文件
- fs::remove_file(&SOCKET_PATH).ok();
- // 创建Unix域监听socket
- let listener = UnixListener::bind(SOCKET_PATH)?;
- let client_thread = thread::spawn(move || client());
- // 监听并接受连接
- let (mut stream, _) = listener.accept().expect("listen error");
- let mut buffer = [0; 1024];
- let nbytes = stream.read(&mut buffer).expect("read error");
- let received_msg = str::from_utf8(&buffer[..nbytes]).unwrap();
- client_thread.join().ok();
- fs::remove_file(&SOCKET_PATH).ok();
- if received_msg == MSG {
- Ok(())
- } else {
- Err(Error::from_raw_os_error(-1))
- }
- }
|