test_unix_stream.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. use std::io::{Error, Read, Write};
  2. use std::os::unix::net::{UnixListener, UnixStream};
  3. use std::thread;
  4. use std::{fs, str};
  5. const SOCKET_PATH: &str = "/test.socket";
  6. const MSG: &str = "Hello, unix stream socket!";
  7. fn client() -> std::io::Result<()> {
  8. // 连接到服务器
  9. let mut stream = UnixStream::connect(SOCKET_PATH)?;
  10. // 发送消息到服务器
  11. stream.write_all(MSG.as_bytes())?;
  12. Ok(())
  13. }
  14. pub fn test_unix_stream() -> std::io::Result<()> {
  15. println!("unix stream socket path: {}", SOCKET_PATH);
  16. // 删除可能已存在的socket文件
  17. fs::remove_file(&SOCKET_PATH).ok();
  18. // 创建Unix域监听socket
  19. let listener = UnixListener::bind(SOCKET_PATH)?;
  20. let client_thread = thread::spawn(move || client());
  21. // 监听并接受连接
  22. let (mut stream, _) = listener.accept().expect("listen error");
  23. let mut buffer = [0; 1024];
  24. let nbytes = stream.read(&mut buffer).expect("read error");
  25. let received_msg = str::from_utf8(&buffer[..nbytes]).unwrap();
  26. client_thread.join().ok();
  27. fs::remove_file(&SOCKET_PATH).ok();
  28. if received_msg == MSG {
  29. Ok(())
  30. } else {
  31. Err(Error::from_raw_os_error(-1))
  32. }
  33. }