module Network.Socket.SendFile.Linux (sendFile') where
import Data.Int
import Data.Word
import Foreign.C.Error (throwErrno)
import GHC.IOBase (FD, haFD)
import GHC.Handle (withHandle_)
import System.IO (Handle, hFlush)
sendFile' :: Handle -> Handle -> Integer -> IO ()
sendFile' outp inp count = do
hFlush outp
withHandle_ "Network.Socket.SendFile.Linux.sendFile'" outp $ \outp' -> do
withHandle_ "Network.Socket.SendFile.Linux.sendFile'" inp $ \inp' -> do
let out_fd = haFD outp'
let in_fd = haFD inp'
res <- c_sendfile_linux out_fd in_fd (fromIntegral count)
if res == 1
then throwErrno "Network.Socket.SendFile.Linux.sendFile'"
else return ()
foreign import ccall
c_sendfile_linux :: FD -> FD -> (Word32) -> IO (Int32)