packages feed

simple-sendfile 0.2.11 → 0.2.12

raw patch · 2 files changed

+15/−14 lines, 2 files

Files

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