docs: def _run(self):
          """Run the receiver.
          """
          port = broadcast_port
          nameservers = []
          if self._multicast_enabled:
              recv = MulticastReceiver(port).settimeout(2.)
              while True:
                  try:
                      recv = MulticastReceiver(port).settimeout(2.)
                      LOGGER.info("Receiver initialized.")
                      break
                  except IOError as err:
                      if err.errno == errno.ENODEV:
                          LOGGER.error("Receiver initialization failed "
                                       "(no such device). "
                                       "Trying again in %d s",
                                       10)
                          time.sleep(10)
                      else:
                          raise
          else:
              recv = _SimpleReceiver(port)
              nameservers = ["localhost"]
  
          self._is_running = True
          with Publish("address_receiver", self._port, ["addresses"],
                       nameservers=nameservers) as pub:
              try:
                  while self._do_run:
                      try:
                          data, fromaddr = recv()
                          LOGGER.debug("data %s", data)
                          del fromaddr
                      except SocketTimeout:
                          if self._multicast_enabled:
                              LOGGER.debug("Multicast socket timed out on recv!")
                              continue
                      finally:
                          self._check_age(pub, min_interval=self._max_age / 20)
                          if self._do_heartbeat:
                              pub.heartbeat(min_interval=29)
                      msg = Message.decode(data)
                      name = msg.subject.split("/")[1]
                      if(msg.type == 'info' and
                         msg.subject.lower().startswith(self._subject)):
                          addr = msg.data["URI"]
                          msg.data['status'] = True
                          metadata = copy.copy(msg.data)
                          metadata["name"] = name
  
                          LOGGER.debug('receiving address %s %s %s', str(addr),
                                       str(name), str(metadata))
                          if addr not in self._addresses:
                              LOGGER.info("nameserver: publish add '%s'",
                                          str(msg))
                              pub.send(msg.encode())
                          self._add(addr, metadata)
              finally:
                  self._is_running = False
                  recv.close()