docs: def has_state_changed(self):
          """
          Detect changes in offline detector and real DNS value.
  
          Detect a change either in the offline detector or a
          difference between the real DNS value and what the online
          detector last got.
          This is efficient, since it only generates minimal dns traffic
          for online detectors and no traffic at all for offline detectors.
  
          :rtype: boolean
          """
          self.lastcheck = time.time()
          # prefer offline state change detection:
          if self.detector.can_detect_offline():
              self.detector.detect()
          elif not self.dns.detect() == self.detector.get_current_value():
              # The following produces traffic, but probably less traffic
              # overall than the detector
              self.detector.detect()
  
          if self.detector.has_changed():
              LOG.debug("detector changed")
              return True
          elif self.dns.has_changed():
              LOG.debug("dns changed")
              return True
  
          return False