use crate::{Error, Result}; use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; use std::os::unix::net::UnixDatagram; pub struct VM { sock: UnixDatagram, } impl VM { pub fn new(vm_fd: RawFd) -> Result { let sock = unsafe { UnixDatagram::from_raw_fd(vm_fd) }; sock.set_nonblocking(true) .map_err(|err| Error::InitFailed { source: err.into() })?; Ok(VM { sock }) } pub fn write(&self, pkt: &[u8]) -> std::io::Result { self.sock.send(pkt) } pub fn read(&self, buf: &mut [u8]) -> std::io::Result { self.sock.recv(buf) } } impl AsRawFd for VM { fn as_raw_fd(&self) -> RawFd { self.sock.as_raw_fd() } }