code: async def _close(self) -> None:
          
          # Stop accepting new connections.
          self.server.close()
  
          # Wait until self.server.close() completes.
          await self.server.wait_closed()
  
          # Wait until all accepted connections reach connection_made() and call
          # register(). See https://bugs.python.org/issue34852 for details.
          await asyncio.sleep(0)
  
          # Close open connections. fail_connection() will cancel the transfer
          # data task, which is expected to cause the handler task to terminate.
          for websocket in self.websockets:
              if websocket.state is State.OPEN:
                  websocket.fail_connection(1001)
  
          # asyncio.wait doesn't accept an empty first argument.
          if self.websockets:
              # The connection handler can terminate before or after the
              # connection closes. Wait until both are done to avoid leaking
              # running tasks.
              # TODO: it would be nicer to wait only for the connection handler
              # and let the handler wait for the connection to close.
              await asyncio.wait(
                  [websocket.handler_task for websocket in self.websockets]
                  + [
                      websocket.close_connection_task
                      for websocket in self.websockets
                      if websocket.state is State.OPEN
                  ],
                  loop=self.loop,
              )
  
          # Tell wait_closed() to return.
          self.closed_waiter.set_result(None)
docs: Implementation of :meth:`close`.
  
          This calls :meth:`~asyncio.Server.close` on the underlying
          :class:`~asyncio.Server` object to stop accepting new connections and
          then closes open connections with close code 1001.