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

#342 in Unix APIs

Download history 721/week @ 2023-12-11 467/week @ 2023-12-18 3/week @ 2023-12-25 552/week @ 2024-01-01 801/week @ 2024-01-08 825/week @ 2024-01-15 944/week @ 2024-01-22 1168/week @ 2024-01-29 1677/week @ 2024-02-05 1834/week @ 2024-02-12 1884/week @ 2024-02-19 1878/week @ 2024-02-26 1654/week @ 2024-03-04 1478/week @ 2024-03-11 4854/week @ 2024-03-18 4068/week @ 2024-03-25

12,151 downloads per month
Used in 2 crates

MIT license

39KB
355 lines

passfd

Build Status

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.


lib.rs:

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);

Dependencies

~0–11MB
~82K SLoC