Natively supported using sendfile()
are Linux, Android, MacOS, iOS, FreeBSD and DragonFlyBSD,
and every other std
-platform using a fallback.
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)
}