on master help sign in
Optimized sendResponse for ResponseBuilder
commitab5b540c54ab12da3df976255f5d6e3b84774075 authorMichael Snoyman <michael@snoyman.com> dateFri 14 Jan 2011, 12:20 (16 years ago) parent8d1ba29
1 file changed+13−9
Network/Wai/Handler/Warp.hs+13−9
Network/Wai/Handler/Warp.hs+13−9
@@ -218,19 +218,23 @@ sendResponse req hv socket (ResponseFile s hs fp) = do
218218 sendFile socket fp
219219 return $ lookup "content-length" hs /= Nothing
220220 else return True
221−sendResponse req hv socket (ResponseBuilder s hs b) = do
222− toByteStringIO (Sock.sendAll socket) $
223− if hasBody s req
224− then b'
225− else headers'
226− return isKeepAlive
221+sendResponse req hv socket (ResponseBuilder s hs b)
222+ | hasBody s req = do
223+ toByteStringIO (Sock.sendAll socket) b'
224+ return isKeepAlive
225+ | otherwise = do
226+ Sock.sendMany socket
227+ $ L.toChunks
228+ $ toLazyByteString
229+ $ headers hv s hs False
230+ return True
227231 where
228− headers' = headers hv s hs True
232+ headers' = headers hv s hs isChunked'
229233 b' =
230234 if isChunked'
231235 then headers'
232− `mappend` chunkedTransferEncoding b
233− `mappend` chunkedTransferTerminator
236+ `mappend` chunkedTransferEncoding b
237+ `mappend` chunkedTransferTerminator
234238 else headers hv s hs False `mappend` b
235239 hasLength = lookup "content-length" hs /= Nothing
236240 isChunked' = isChunked hv && not hasLength