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 unsafe
c_sendfile_linux :: FD -> FD -> (Word32) -> IO (Int32)