docs: async def _next_event(self):
          """
          Gets the next event.
          """
          while True:
              for event in self._connection.events():
                  if isinstance(event, Message):
                      # check if we need to buffer
                      if event.message_finished:
                          return self._wrap_data(self._gather_buffers(event))
                      self._buffer(event)
                      break  # exit for loop
                  else:
                      return event
  
              data = await self._sock.receive_some(4096)
              if not data:
                  return CloseConnection(code=500, reason="Socket closed")
              self._connection.receive_data(data)