| 225 | _setup_fd(self._fd) |
| 226 | |
| 227 | def _partial_flush(self, max_retain): |
| 228 | byts = self._bd.get_all() |
| 229 | cursor = memoryview(byts) |
| 230 | |
| 231 | flushed = False |
| 232 | while len(cursor) > max_retain: |
| 233 | try: |
| 234 | n = os.write(self._fd, cursor) |
| 235 | flushed = True |
| 236 | cursor = memoryview(cursor)[n:] |
| 237 | except EnvironmentError as e: |
| 238 | if e.errno in [errno.EAGAIN, errno.EWOULDBLOCK]: |
| 239 | gevent.socket.wait_write(self._fd) |
| 240 | else: |
| 241 | raise |
| 242 | |
| 243 | assert self._bd.byteSz == 0 |
| 244 | if len(cursor) > 0: |
| 245 | self._bd.add(cursor) |
| 246 | |
| 247 | return flushed |
| 248 | |
| 249 | def write(self, data): |
| 250 | self._bd.add(data) |