raise RuntimeError('unable to writelines; sendfile is in progress')
if not list_of_data:
return
+
+ if self._conn_lost:
+ if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES:
+ logger.warning('socket.send() raised exception.')
+ self._conn_lost += 1
+ return
+
self._buffer.extend([memoryview(data) for data in list_of_data])
self._write_ready()
# If the entire buffer couldn't be written, register a write handler
self.assertTrue(self.sock.send.called)
self.assertTrue(self.loop.writers)
+ def test_writelines_after_connection_lost(self):
+ # GH-136234
+ transport = self.socket_transport()
+ self.sock.send = mock.Mock()
+ self.sock.send.side_effect = ConnectionResetError
+ transport.write(b'data1') # Will fail immediately, causing connection lost
+
+ transport.writelines([b'data2'])
+ self.assertFalse(transport._buffer)
+ self.assertFalse(self.loop.writers)
+
+ test_utils.run_briefly(self.loop) # Allow _call_connection_lost to run
+ transport.writelines([b'data2'])
+ self.assertFalse(transport._buffer)
+ self.assertFalse(self.loop.writers)
+
@unittest.skipUnless(selector_events._HAS_SENDMSG, 'no sendmsg')
def test_write_sendmsg_full(self):
data = memoryview(b'data')