mirror of
https://github.com/cirruslabs/softnet.git
synced 2026-09-30 12:01:09 +02:00
* Sentry integration * Introduce a more generic CIRRUS_SENTRY_TAGS * Revert switching to nightly toolchain
31 lines
640 B
Rust
31 lines
640 B
Rust
use anyhow::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<VM> {
|
|
let sock = unsafe { UnixDatagram::from_raw_fd(vm_fd) };
|
|
sock.set_nonblocking(true)?;
|
|
|
|
Ok(VM { sock })
|
|
}
|
|
|
|
pub fn write(&self, pkt: &[u8]) -> std::io::Result<usize> {
|
|
self.sock.send(pkt)
|
|
}
|
|
|
|
pub fn read(&self, buf: &mut [u8]) -> std::io::Result<usize> {
|
|
self.sock.recv(buf)
|
|
}
|
|
}
|
|
|
|
impl AsRawFd for VM {
|
|
fn as_raw_fd(&self) -> RawFd {
|
|
self.sock.as_raw_fd()
|
|
}
|
|
}
|