simple-sendfile 0.2.11 → 0.2.12
raw patch · 2 files changed
+15/−14 lines, 2 files
Files
- Network/Sendfile/Linux.hsc +9/−12
- simple-sendfile.cabal +6/−2
Network/Sendfile/Linux.hsc view
@@ -88,25 +88,22 @@ sendloop :: Fd -> Fd -> Ptr COff -> CSize -> IO () -> IO () sendloop dst src offp len hook = do+ -- Multicore IO manager use edge-trigger mode.+ -- So, calling threadWaitWrite only when errnor is eAGAIN. bytes <- c_sendfile dst src offp len case bytes of -1 -> do errno <- getErrno- if errno == eAGAIN then- loop len+ if errno == eAGAIN then do+ threadWaitWrite dst+ sendloop dst src offp len hook else throwErrno "Network.SendFile.Linux.sendloop" 0 -> return () -- the file is truncated- _ -> loop (len - fromIntegral bytes)- where- loop 0 = return ()- loop left = do- hook- -- Parallel IO manager use edge-trigger mode.- -- So, calling threadWaitWrite only when errnor is eAGAIN.- errno <- getErrno- when (errno == eAGAIN) $ threadWaitWrite dst- sendloop dst src offp left hook+ _ -> do+ hook+ let left = len - fromIntegral bytes+ when (left /= 0) $ sendloop dst src offp left hook -- Dst Src in order. take care foreign import ccall unsafe "sendfile"
simple-sendfile.cabal view
@@ -1,5 +1,5 @@ Name: simple-sendfile-Version: 0.2.11+Version: 0.2.12 Author: Kazu Yamamoto <kazu@iij.ad.jp> Maintainer: Kazu Yamamoto <kazu@iij.ad.jp> License: BSD3@@ -12,6 +12,10 @@ Cabal-Version: >= 1.10 Build-Type: Simple +Flag allow-bsd+ Description: Allow use of BSD sendfile (disable on GNU/kFreeBSD)+ Default: True+ Library Default-Language: Haskell2010 GHC-Options: -Wall@@ -21,7 +25,7 @@ , network , bytestring -- NetBSD and OpenBSD don't have sendfile- if os(freebsd)+ if os(freebsd) && flag(allow-bsd) CPP-Options: -DOS_BSD Other-Modules: Network.Sendfile.BSD Network.Sendfile.IOVec