Skip to main content

Crate passfd

Crate passfd 

Source
Expand description

passfd allows passing file descriptors between unrelated processes using Unix sockets.

Both tokio 0.1 and 0.2 are supported with tokio_01 and tokio_02 features. Please note that these features rely on internal representation of UnixStream and are unsafe.

§Example usage

§Process 1 (sender)

use passfd::FdPassingExt;
use std::fs::File;
use std::os::unix::io::AsRawFd;
use std::os::unix::net::UnixListener;

let file = File::open("/etc/passwd").unwrap();
let listener = UnixListener::bind("/tmp/test.sock").unwrap();
let (stream, _) = listener.accept().unwrap();
stream.send_fd(file.as_raw_fd()).unwrap();

§Process 2 (receiver)

use passfd::FdPassingExt;
use std::fs::File;
use std::io::Read;
use std::os::unix::io::FromRawFd;
use std::os::unix::net::UnixStream;

let stream = UnixStream::connect("/tmp/test.sock").unwrap();
let fd = stream.recv_fd().unwrap();
let mut file = unsafe { File::from_raw_fd(fd) };
let mut buf = String::new();
file.read_to_string(&mut buf).unwrap();
println!("{}", buf);

Traits§

FdPassingExt
Main trait, extends UnixStream