A cross-platform wrapper for sendfile -- this implements an available operating-system call if supported, otherwise it falls back to a portable haskell implementation.
Two interfaces are provided for both the unsafe and safe sets of functions. The first interface accepts an output socket/handle and the path of the file you want to send; sendFile and unsafeSendFile comprise this interface. The second interface accepts an output socket/handle, a handle to the file you want to send, an offset, and the number of bytes you want to send; sendFile' and unsafeSendFile' comprise this interface.
For consistent read/write behavior with either sendFile' or unsafeSendFile', the input handle should be opened in Binary mode rather than Text mode.
Documentation
Safe functions (recommended)
:: Socket | The output socket |
-> FilePath | The input file handle |
-> Offset | The offset to start at |
-> ByteCount | The number of bytes to send |
-> IO () |
A more powerful interface than sendFile which accepts a starting offset, and the bytecount to send; the offset and the count must be a positive integer. The initial position of the input file handle matters not since the offset is absolute, and the final position may be different depending on the platform -- no assumptions can be made.
Utility functions
:: String | The mode that sendfile was compiled with |
Returns the mode that sendfile was compiled with. Mainly for debugging use.
| Possible values are WIN32_SENDFILE
, LINUX_SENDFILE
, FREEBSD_SENDFILE
,
| DARWIN_SENDFILE
, and PORTABLE_SENDFILE
.