@@ -32,6 +32,7 @@ import qualified System.IO as IO
3232#else
3333import Network.Wai.Handler.Warp.FdCache
3434import Network.Wai.Handler.Warp.SendFile (positionRead)
35+import System.Posix.IO (openFd, OpenFileFlags(..), defaultFileFlags, OpenMode(ReadOnly))
3536import System.Posix.Types
3637#endif
3738
@@ -230,8 +231,11 @@ fillResponseBodyGetNext Connection{connWriteBuffer,connBufferSize}
230231#else
231232fillResponseBodyGetNext Connection{connWriteBuffer,connBufferSize}
232233 ii off lim (ResponseFile _ _ path mpart) = do
233− let Just fdcache = fdCacher ii
234− (fd, refresh) <- getFd fdcache path
234+ (fd, refresh) <- case fdCacher ii of
235+ Just fdcache -> getFd fdcache path
236+ Nothing -> do
237+ fd' <- openFd path ReadOnly Nothing defaultFileFlags{nonBlock=True}
238+ return (fd', return ())
235239 let datBuf = connWriteBuffer `plusPtr` off
236240 room = min (connBufferSize - off) lim
237241 (start, bytes) <- fileStartEnd path mpart