(self)
| 369 | await tasks.sleep(0) |
| 370 | |
| 371 | async def serve_forever(self): |
| 372 | if self._serving_forever_fut is not None: |
| 373 | raise RuntimeError( |
| 374 | f'server {self!r} is already being awaited on serve_forever()') |
| 375 | if self._sockets is None: |
| 376 | raise RuntimeError(f'server {self!r} is closed') |
| 377 | |
| 378 | self._start_serving() |
| 379 | self._serving_forever_fut = self._loop.create_future() |
| 380 | |
| 381 | try: |
| 382 | await self._serving_forever_fut |
| 383 | except exceptions.CancelledError: |
| 384 | try: |
| 385 | self.close() |
| 386 | self.close_clients() |
| 387 | await self.wait_closed() |
| 388 | finally: |
| 389 | raise |
| 390 | finally: |
| 391 | self._serving_forever_fut = None |
| 392 | |
| 393 | async def wait_closed(self): |
| 394 | """Wait until server is closed and all connections are dropped. |
no test coverage detected