| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Network.Sendfile
Description
Cross platform library for the sendfile system call. This library tries to call minimum system calls which are the bottleneck of web servers.
Synopsis
- sendfile :: Socket -> FilePath -> FileRange -> IO () -> IO ()
- sendfileWithHeader :: Socket -> FilePath -> FileRange -> IO () -> [ByteString] -> IO ()
- sendfileFd :: Socket -> Fd -> FileRange -> IO () -> IO ()
- sendfileFdWithHeader :: Socket -> Fd -> FileRange -> IO () -> [ByteString] -> IO ()
- data FileRange
- = EntireFile
- | PartOfFile {
- rangeOffset :: Integer
- rangeLength :: Integer
Documentation
sendfile :: Socket -> FilePath -> FileRange -> IO () -> IO () Source #
Simple binding for sendfile() of Linux. Used system calls:
- EntireFile -- open(), stat(), sendfile(), and close()
- PartOfFile -- open(), sendfile(), and close()
If the size of the file is unknown when sending the entire file, specifying PartOfFile is much faster.
The fourth action argument is called when a file is sent as chunks. Chucking is inevitable if the socket is non-blocking (this is the default) and the file is large. The action is called after a chunk is sent and before waiting the socket to be ready for writing.
sendfileWithHeader :: Socket -> FilePath -> FileRange -> IO () -> [ByteString] -> IO () Source #
Simple binding for send() and sendfile() of Linux. Used system calls:
- EntireFile -- open(), send(), stat(), sendfile(), and close()
- PartOfFile -- open(), send(), sendfile(), and close()
The fifth header is sent with send() + the MSG_MORE flag. If the file is small enough, the header and the file is send in a single TCP packet.
If the size of the file is unknown when sending the entire file, specifying PartOfFile is much faster.
The fourth action argument is called when a file is sent as chunks. Chucking is inevitable if the socket is non-blocking (this is the default) and the file is large. The action is called after a chunk is sent and before waiting the socket to be ready for writing.
sendfileFd :: Socket -> Fd -> FileRange -> IO () -> IO () Source #
Simple binding for sendfile() of Linux. Used system calls:
- EntireFile -- stat() and sendfile()
- PartOfFile -- sendfile()
If the size of the file is unknown when sending the entire file, specifying PartOfFile is much faster.
The fourth action argument is called when a file is sent as chunks. Chucking is inevitable if the socket is non-blocking (this is the default) and the file is large. The action is called after a chunk is sent and before waiting the socket to be ready for writing.
sendfileFdWithHeader :: Socket -> Fd -> FileRange -> IO () -> [ByteString] -> IO () Source #
Simple binding for send() and sendfile() of Linux. Used system calls:
- EntireFile -- send(), stat() and sendfile()
- PartOfFile -- send() and sendfile()
The fifth header is sent with send() + the MSG_MORE flag. If the file is small enough, the header and the file is send in a single TCP packet.
If the size of the file is unknown when sending the entire file, specifying PartOfFile is much faster.
The fourth action argument is called when a file is sent as chunks. Chucking is inevitable if the socket is non-blocking (this is the default) and the file is large. The action is called after a chunk is sent and before waiting the socket to be ready for writing.
File range for sendfile.
- If the offset or the length of
PartOfFileis negative, anIOExceptionofInvalidArgumentis thrown before anything is sent. - If the length is 0, nothing is sent (only the header for the
WithHeadervariants). - If the file is shorter than the range, or is truncated while being sent, sending stops at the end of the file without any error. So, the number of bytes sent may be less than requested.
Constructors
| EntireFile | |
| PartOfFile | |
Fields
| |