[][src]Crate snedfile

Cross-platform abstractions for the sendfile() system call. Natively supported are Linux, android, MacOS, iOS, FreeBSD and DragonFlyBSD, and every other std-platform using a fallback.

Implementations

All native implementation support a maximum file length of off_t::max_value().

All implementations handle WouldBlock and Interrupted errors.

Linux and android

The sendfile(2) system call is used.

The file length is required and the functions fails if file.metadata() fails.

MacOS and optionally iOS

The sendfile(2) system call is used.

The file length is only required after the maximum file length has been sent. Note that there are sparse reports of sendfile() being buggy on iOS, so if you prefer to use the fallback for target_os = "ios", disable the ios-sendfile feature which is enabled by default.

FreeBSD and DragonFlyBSD

The sendfile(2) system call is used.

The file length is not required.

Fallback

There are two features to change the fallback behavior:

The fallback-bufreader feature is enabled by default. It sends the file using io::copy() after wrapping it in a BufReader. Interrupted errors are handled by the implementation.

If the fallback-buf feature is enabled, the entire contents of the file are loaded into a Vec first, which is then written to the stream at once. Only the first usize::max_value() may be transmitted.

If both features are disabled the file is transmitted by repeatedly using bare io::copy() until all bytes have been sent.

Large files

If you expected to send files larger than 2 gigabytes from a 32-bit system or files larger than 8192 petabytes from a 64-bit system, enable the large-files feature which supports all file sizes up to u64::max_value(), and if the files become to large for the native solutions a fallback is used.

Functions

send_exact

Send a specific amount of bytes from a specific offset within a file.

send_file

Sends the entire contents of a file to a TCP stream.