(self, data)
| 1056 | self.close() |
| 1057 | |
| 1058 | def write(self, data): |
| 1059 | if not isinstance(data, (bytes, bytearray, memoryview)): |
| 1060 | raise TypeError(f'data argument must be a bytes, bytearray, or memoryview ' |
| 1061 | f'object, not {type(data).__name__!r}') |
| 1062 | if self._eof: |
| 1063 | raise RuntimeError('Cannot call write() after write_eof()') |
| 1064 | if self._empty_waiter is not None: |
| 1065 | raise RuntimeError('unable to write; sendfile is in progress') |
| 1066 | if not data: |
| 1067 | return |
| 1068 | |
| 1069 | if self._conn_lost: |
| 1070 | if self._conn_lost >= constants.LOG_THRESHOLD_FOR_CONNLOST_WRITES: |
| 1071 | logger.warning('socket.send() raised exception.') |
| 1072 | self._conn_lost += 1 |
| 1073 | return |
| 1074 | |
| 1075 | if not self._buffer: |
| 1076 | # Optimization: try to send now. |
| 1077 | try: |
| 1078 | n = self._sock.send(data) |
| 1079 | except (BlockingIOError, InterruptedError): |
| 1080 | pass |
| 1081 | except (SystemExit, KeyboardInterrupt): |
| 1082 | raise |
| 1083 | except BaseException as exc: |
| 1084 | self._fatal_error(exc, 'Fatal write error on socket transport') |
| 1085 | return |
| 1086 | else: |
| 1087 | data = memoryview(data)[n:] |
| 1088 | if not data: |
| 1089 | return |
| 1090 | # Not all was written; register write handler. |
| 1091 | self._add_writer(self._sock_fd, self._write_ready) |
| 1092 | |
| 1093 | # Add it to the buffer. |
| 1094 | self._buffer.append(data) |
| 1095 | self._buffer_size += len(data) |
| 1096 | self._maybe_pause_protocol() |
| 1097 | |
| 1098 | def _get_sendmsg_buffer(self): |
| 1099 | return itertools.islice(self._buffer, SC_IOV_MAX) |
nothing calls this directly
no test coverage detected