docs: def until_protocol(self, timeout=None):
          """Return future that resolves after receipt of katcp protocol info.
  
          If the returned future resolves, the server's protocol information is
          available in the ProtocolFlags instance self.protocol_flags.
  
          """
          t0 = self.ioloop.time()
          yield self.until_running(timeout=timeout)
          t1 = self.ioloop.time()
          if timeout:
              timedelta = timeout - (t1 - t0)
          else:
              timedelta = None
          assert get_thread_ident() == self.ioloop_thread_id
          yield self._received_protocol_info.until_set(timeout=timedelta)