@@ -42,13 +42,14 @@ write socket bs = S.unsafeUseAsCStringLen bs $ \(s, l) -> do
4242 _ <- c'write socket s (fromIntegral l)
4343 return ()
4444
45−input :: CInt -> IORef Int -> IO (Maybe S.ByteString)
46−input socket ilen = do
45+input :: CInt -> IORef Int -> Int -> IO (Maybe S.ByteString)
46+input socket ilen rlen = do
4747 len <- readIORef ilen
4848 case len of
4949 0 -> return Nothing
5050 _ -> do
51− bs <- readByteString socket $ min defaultChunkSize len
51+ bs <- readByteString socket
52+ $ minimum [defaultChunkSize, len, rlen]
5253 writeIORef ilen $ len - S.length bs
5354 return $ Just bs
5455