waiter=None, extra=None):
self._address = address
self._empty_waiter = None
+ self._buffer_size = 0
# We don't need to call _protocol.connection_made() since our base
# constructor does it for us.
super().__init__(loop, sock, protocol, waiter=waiter, extra=extra)
_set_socket_extra(self, sock)
def get_write_buffer_size(self):
- return sum(len(data) for data, _ in self._buffer)
+ return self._buffer_size
def abort(self):
self._force_close(None)
# Ensure that what we buffer is immutable.
self._buffer.append((bytes(data), addr))
+ self._buffer_size += len(data)
if self._write_fut is None:
# No current write operations are active, kick one off
return
data, addr = self._buffer.popleft()
+ self._buffer_size -= len(data)
if self._address is not None:
self._write_fut = self._loop._proactor.send(self._sock,
data)
waiter=None, extra=None):
super().__init__(loop, sock, protocol, extra)
self._address = address
+ self._buffer_size = 0
self._loop.call_soon(self._protocol.connection_made, self)
# only start reading when connection_made() has been called
self._loop.call_soon(self._add_reader,
waiter, None)
def get_write_buffer_size(self):
- return sum(len(data) for data, _ in self._buffer)
+ return self._buffer_size
def _read_ready(self):
if self._conn_lost:
# Ensure that what we buffer is immutable.
self._buffer.append((bytes(data), addr))
+ self._buffer_size += len(data)
self._maybe_pause_protocol()
def _sendto_ready(self):
while self._buffer:
data, addr = self._buffer.popleft()
+ self._buffer_size -= len(data)
try:
if self._extra['peername']:
self._sock.send(data)
self._sock.sendto(data, addr)
except (BlockingIOError, InterruptedError):
self._buffer.appendleft((data, addr)) # Try again later.
+ self._buffer_size += len(data)
break
except OSError as exc:
self._protocol.error_received(exc)