mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-15 04:46:49 +00:00
* 将sockets分成inet和unix域 - 添加File端点 - 添加SocketPair trait并将Socket trait中的pair相关方法移动 - 添加对SockAddrUn的处理 * 精简SocketHandleItem * 重构socketpair相关逻辑 - 将File端点换成Inode端点 - 尝试使用SocketInode进行socketpair(未成功) * 将SocketPair trait合并到Socket trait中,去除downcast
43 lines
1.2 KiB
Rust
43 lines
1.2 KiB
Rust
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))
|
|
}
|
|
}
|