module Network.Socket.SendFile.Internal (
sendFile,
sendFile',
sendFileMode
) where
import System.IO (
Handle,
IOMode(..),
hFileSize,
withBinaryFile
)
#if defined(WIN32_SENDFILE)
import Network.Socket.SendFile.Win32 (_sendFile)
sendFileMode :: String
sendFileMode = "WIN32_SENDFILE"
#endif
#if defined(LINUX_SENDFILE)
import Network.Socket.SendFile.Linux (_sendFile)
sendFileMode :: String
sendFileMode = "LINUX_SENDFILE"
#endif
#if defined(PORTABLE_SENDFILE)
import Network.Socket.SendFile.Portable (_sendFile)
sendFileMode :: String
sendFileMode = "PORTABLE_SENDFILE"
#endif
sendFile :: Handle -> FilePath -> IO ()
sendFile outp infp = withBinaryFile infp ReadMode $ \inp -> do
count <- hFileSize inp
sendFile' outp inp count
sendFile' :: Handle -> Handle -> Integer -> IO ()
sendFile' outp inp count
| count < 0 = error "sendFile' - count must be a positive integer"
| count == 0 = return ()
| otherwise = _sendFile outp inp count