@@ -11,7 +11,7 @@ module Network.Wai.Handler.Warp.Response (
1111 , defaultServerValue
1212 ) where
1313
14−import Blaze.ByteString.Builder (fromByteString, Builder, toByteStringIO, flush)
14+import Blaze.ByteString.Builder (fromByteString, Builder, flush)
1515import Blaze.ByteString.Builder.HTTP (chunkedTransferEncoding, chunkedTransferTerminator)
1616import Control.Applicative
1717import Control.Exception
@@ -36,6 +36,8 @@ import qualified Network.HTTP.Types as H
3636import Network.Wai
3737import qualified Network.Wai.Handler.Warp.Date as D
3838import Network.Wai.Handler.Warp.Header
39+import Network.Wai.Handler.Warp.Buffer (toBlazeBuffer)
40+import Network.Wai.Handler.Warp.IO (toBufIOWith)
3941import Network.Wai.Handler.Warp.ResponseHeader
4042import qualified Network.Wai.Handler.Warp.Timeout as T
4143import Network.Wai.Handler.Warp.Types
@@ -215,14 +217,16 @@ sendRsp conn ver s hs (RspBuilder body needsChunked) = do
215217 | needsChunked = header <> chunkedTransferEncoding body
216218 <> chunkedTransferTerminator
217219 | otherwise = header <> body
218− flip toByteStringIO hdrBdy $ connSendAll conn
220+ buffer = connBuffer conn
221+ size = connBufferSize conn
222+ toBufIOWith buffer size (connSendAll conn) hdrBdy
219223
220224----------------------------------------------------------------
221225
222226sendRsp conn ver s hs (RspSource withBodyFlush needsChunked th) = withBodyFlush $ \bodyFlush -> do
223227 header <- composeHeaderBuilder ver s hs needsChunked
224228 let src = yield header >> cbody bodyFlush
225− buffer = connBuffer conn
229+ buffer <- toBlazeBuffer (connBuffer conn) (connBufferSize conn)
226230 src $$ unsafeBuilderToByteString (return buffer) =$ connSink conn th
227231 where
228232 cbody bodyFlush = if needsChunked then body $= chunk else body