docs: def handle(self):
          """
          Handle a new socket connection.
          """
          # self.request is the TCP socket connected to the client
          try:
              while not self.server._shutdown_request_event.is_set():
                  try:
                      data = self.request.recv(8192)
                      if not data:
                          break
                      if self.debug:
                          self.log.debug("RECV: %r" % data)
                      self.buffer.append(data)
  
                      for frame in self.buffer:
                          self.log.debug("Processing frame: %s" % frame)
                          self.engine.process_frame(frame)
                          if not self.engine.connected:
                              raise ClientDisconnected()
                  except socket.timeout:  # pragma: no cover
                      pass
          except ClientDisconnected:
              self.log.debug("Client disconnected, discontinuing read loop.")
          except Exception as e:  # pragma: no cover
              self.log.error("Error receiving data (unbinding): %s" % e)
              self.engine.unbind()
              raise