| 280 | self.loop.call_soon(self.close) |
| 281 | |
| 282 | async def proxy_from_backend(self): |
| 283 | buf = None |
| 284 | |
| 285 | try: |
| 286 | while True: |
| 287 | await self.connectivity.wait() |
| 288 | if buf is not None: |
| 289 | data = buf |
| 290 | buf = None |
| 291 | else: |
| 292 | data = await self._read(self.backend_sock, 4096) |
| 293 | if data == b'': |
| 294 | break |
| 295 | if self.connectivity_loss.is_set(): |
| 296 | if data: |
| 297 | buf = data |
| 298 | continue |
| 299 | await self._write(self.client_sock, data) |
| 300 | |
| 301 | except ConnectionError: |
| 302 | pass |
| 303 | |
| 304 | finally: |
| 305 | if not self.loop.is_closed(): |
| 306 | self.loop.call_soon(self.close) |