| 737 | self._maybe_pause_protocol() |
| 738 | |
| 739 | def _write_ready(self): |
| 740 | assert self._buffer, 'Data should not be empty' |
| 741 | |
| 742 | try: |
| 743 | n = os.write(self._fileno, self._buffer) |
| 744 | except (BlockingIOError, InterruptedError): |
| 745 | pass |
| 746 | except (SystemExit, KeyboardInterrupt): |
| 747 | raise |
| 748 | except BaseException as exc: |
| 749 | self._buffer.clear() |
| 750 | self._conn_lost += 1 |
| 751 | # Remove writer here, _fatal_error() doesn't it |
| 752 | # because _buffer is empty. |
| 753 | self._loop._remove_writer(self._fileno) |
| 754 | self._fatal_error(exc, 'Fatal write error on pipe transport') |
| 755 | else: |
| 756 | if n == len(self._buffer): |
| 757 | self._buffer.clear() |
| 758 | self._loop._remove_writer(self._fileno) |
| 759 | self._maybe_resume_protocol() # May append to buffer. |
| 760 | if self._closing: |
| 761 | self._loop._remove_reader(self._fileno) |
| 762 | self._call_connection_lost(None) |
| 763 | return |
| 764 | elif n > 0: |
| 765 | del self._buffer[:n] |
| 766 | |
| 767 | def can_write_eof(self): |
| 768 | return True |