7 releases
| 0.1.6 | Feb 24, 2023 |
|---|---|
| 0.1.5 | Dec 3, 2022 |
| 0.1.4 | May 14, 2020 |
| 0.1.3 | Apr 13, 2020 |
| 0.1.1 | Mar 13, 2019 |
#1357 in Unix APIs
17,799 downloads per month
Used in 17 crates
(5 directly)
39KB
355 lines
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);
passfd
Unix sockets possess magic ability to transfer file descriptors from one process to another (unrelated) process using
obscure SCM_RIGHTS API. This little crate adds extension methods to UnixStream to use it.
Links
- fd-passing same thing, different API
- Good article on fd passing
Dependencies
~0–3.5MB
~53K SLoC