self.body_timeout = body_timeout
self.max_body_size = max_body_size
TCPServer.__init__(self, io_loop=io_loop, ssl_options=ssl_options,
- max_buffer_size=max_buffer_size)
+ max_buffer_size=max_buffer_size,
+ read_chunk_size=chunk_size)
def handle_stream(self, stream, address):
conn = HTTP1Connection(
`read_from_fd`, and optionally `get_fd_error`.
"""
def __init__(self, io_loop=None, max_buffer_size=None,
- read_chunk_size=4096):
+ read_chunk_size=None):
self.io_loop = io_loop or ioloop.IOLoop.current()
self.max_buffer_size = max_buffer_size or 104857600
- self.read_chunk_size = read_chunk_size
+ # A chunk size that is too close to max_buffer_size can cause
+ # spurious failures.
+ self.read_chunk_size = min(read_chunk_size or 65536,
+ self.max_buffer_size//2)
self.error = None
self._read_buffer = collections.deque()
self._write_buffer = collections.deque()
return 0
self._read_buffer.append(chunk)
self._read_buffer_size += len(chunk)
- if self._read_buffer_size >= self.max_buffer_size:
+ if self._read_buffer_size > self.max_buffer_size:
gen_log.error("Reached maximum read buffer size")
self.close()
raise IOError("Reached maximum read buffer size")
.. versionadded:: 3.1
The ``max_buffer_size`` argument.
"""
- def __init__(self, io_loop=None, ssl_options=None, max_buffer_size=None):
+ def __init__(self, io_loop=None, ssl_options=None, max_buffer_size=None,
+ read_chunk_size=None):
self.io_loop = io_loop
self.ssl_options = ssl_options
self._sockets = {} # fd -> socket object
self._pending_sockets = []
self._started = False
self.max_buffer_size = max_buffer_size
+ self.read_chunk_size = None
# Verify the SSL options. Otherwise we don't get errors until clients
# connect. This doesn't verify that the keys are legitimate, but
raise
try:
if self.ssl_options is not None:
- stream = SSLIOStream(connection, io_loop=self.io_loop, max_buffer_size=self.max_buffer_size)
+ stream = SSLIOStream(connection, io_loop=self.io_loop,
+ max_buffer_size=self.max_buffer_size,
+ read_chunk_size=self.read_chunk_size)
else:
- stream = IOStream(connection, io_loop=self.io_loop, max_buffer_size=self.max_buffer_size)
+ stream = IOStream(connection, io_loop=self.io_loop,
+ max_buffer_size=self.max_buffer_size,
+ read_chunk_size=self.read_chunk_size)
self.handle_stream(stream, address)
except Exception:
app_log.error("Error in connection callback", exc_info=True)