    module System.Linux.Sendfile (
        sendfile
      , sendfileFd
      , FileRange(..)
      ) where

    import Data.ByteString (ByteString)
    import Network.Sendfile.Linux (sendfile', sendfileFd')
    import Network.Sendfile.Types (FileRange(..))
    import System.Posix.Types (Fd)

    -- |
    -- 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.

    sendfile :: Fd -> ByteString -> FileRange -> IO () -> IO ()
    sendfile :: Fd -> ByteString -> FileRange -> IO () -> IO ()
    sendfile = Fd -> ByteString -> FileRange -> IO () -> IO ()
    sendfile'

    -- |
    -- 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.

    sendfileFd :: Fd -> Fd -> FileRange -> IO () -> IO ()
    sendfileFd :: Fd -> Fd -> FileRange -> IO () -> IO ()
    sendfileFd = Fd -> Fd -> FileRange -> IO () -> IO ()
    sendfileFd'