docs: def wait(self):
      "wait for a message, respecting timeout"
      data=self.getcon().recv(256) # this can raise socket.timeout
      if not data: raise PubsubDisco
      if self.reset:
        self.reset=False # i.e. ack it. reset is used to tell the wait-thread there was a reconnect (though it's plausible that this never happens)
        raise PubsubDisco
      self.buf+=data
      msg,self.buf=complete_message(self.buf)
      return msg