1 unstable release

0.1.0 Sep 13, 2019

#108 in #syscalls

MIT license

24KB
471 lines

snedfile - Rust cross-platform sendfile() abstractions

travis-badge appveyor-badge crates.io-badge docs-badge license-badge

Natively supported using sendfile() are Linux, Android, MacOS, iOS, FreeBSD and DragonFlyBSD, and every other std-platform using a fallback.

Usage

This library is designed to make transmitting files as easy as possible. If you have a file and a TCP stream, all you have to do is

use snedfile::send_file;

fn transmit(path: impl AsRef<Path>, stream: TcpStream) -> io::Result<()> {
    let file = File::open(path)?;

    send_file(&mut file, &mut stream)
}

Trivial errors as well as optimally using the native system capabilities are handled by the implementation.

Alternatively, there is a more low-level solution:

use snedfile::send_exact;

fn transmit(path: impl AsRef<Path>, stream: TcpStream) -> io::Result<()> {
    let file = File::open(path)?;

    send_exact(&mut file, &mut stream, file.metadata()?.len(), 0)
}

Dependencies

~42KB