@@ -37,8 +37,6 @@ import Network.Socket
3737 )
3838import qualified Network.Socket.ByteString as Sock
3939import Control.Exception (bracket, finally, Exception, SomeException, catch)
40−import System.IO (Handle, hClose, hFlush)
41−import System.IO.Error (isEOFError, ioeGetHandle)
4240import Control.Concurrent (forkIO)
4341import Control.Monad (unless, when)
4442import Data.Maybe (fromMaybe)
@@ -49,7 +47,6 @@ import Control.Arrow (first)
4947
5048import Data.Enumerator (($$), (>>==))
5149import qualified Data.Enumerator as E
52−import Data.Enumerator.IO (iterHandle, enumHandle)
5350import Blaze.ByteString.Builder.Enumerator (builderToByteString)
5451import Blaze.ByteString.Builder.HTTP
5552 (chunkedTransferEncoding, chunkedTransferTerminator)
@@ -234,12 +231,16 @@ sendResponse req hv socket (ResponseFile s hs fp) = do
234231 return $ lookup "content-length" hs /= Nothing
235232 else return True
236233sendResponse req hv socket (ResponseBuilder s hs b) = do
237− toByteStringIO (Sock.sendAll socket) b'
234+ toByteStringIO (Sock.sendAll socket) $
235+ if hasBody s req
236+ then b'
237+ else headers'
238238 return isKeepAlive
239239 where
240+ headers' = headers hv s hs True
240241 b' =
241242 if isChunked'
242− then headers hv s hs True
243+ then headers'
243244 `mappend` chunkedTransferEncoding b
244245 `mappend` chunkedTransferTerminator
245246 else headers hv s hs False `mappend` b
@@ -310,7 +311,7 @@ requestBodyHandle initLen =
310311 case mbs of
311312 Nothing -> return ()
312313 Just bs -> do
313− (bs', newlen) <- yieldExtra len bs
314+ (_, newlen) <- yieldExtra len bs
314315 drain newlen
315316 yieldExtra len bs
316317 | B.length bs == len = return (bs, 0)
@@ -320,12 +321,14 @@ requestBodyHandle initLen =
320321 E.yield () $ E.Chunks [y]
321322 return (x, 0)
322323
324+iterSocket :: Socket -> E.Iteratee ByteString IO ()
323325iterSocket socket =
324326 E.continue go
325327 where
326328 go E.EOF = E.yield () E.EOF
327329 go (E.Chunks cs) = liftIO (Sock.sendMany socket cs) >> E.continue go
328330
331+enumSocket :: Int -> Socket -> E.Enumerator ByteString IO a
329332enumSocket len socket (E.Continue k) = do
330333#if NO_TIMEOUT_PROTECTION
331334 bs <- liftIO $ Sock.recv socket len