{"record":{"id":"0d7c25918e7de3eb","repo":"HelloZeroNet/ZeroNet","slug":"no-response-after-0fs","errorCode":null,"errorMessage":"No response after %.0fs","messagePattern":"No response after %\\.0fs","errorType":"exception","errorClass":"AnnounceError","httpStatus":null,"severity":"error","filePath":"plugins/AnnounceBitTorrent/AnnounceBitTorrentPlugin.py","lineNumber":65,"sourceCode":"        s = time.time()\n        if config.disable_udp:\n            raise AnnounceError(\"Udp disabled by config\")\n        if config.trackers_proxy != \"disable\":\n            raise AnnounceError(\"Udp trackers not available with proxies\")\n\n        ip, port = tracker_address.split(\"/\")[0].split(\":\")\n        tracker = UdpTrackerClient(ip, int(port))\n        if helper.getIpType(ip) in self.getOpenedServiceTypes():\n            tracker.peer_port = self.fileserver_port\n        else:\n            tracker.peer_port = 0\n        tracker.connect()\n        if not tracker.poll_once():\n            raise AnnounceError(\"Could not connect\")\n        tracker.announce(info_hash=self.site.address_sha1, num_want=num_want, left=431102370)\n        back = tracker.poll_once()\n        if not back:\n            raise AnnounceError(\"No response after %.0fs\" % (time.time() - s))\n        elif type(back) is dict and \"response\" in back:\n            peers = back[\"response\"][\"peers\"]\n        else:\n            raise AnnounceError(\"Invalid response: %r\" % back)\n\n        return peers\n\n    def httpRequest(self, url):\n        headers = {\n            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',\n            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',\n            'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',\n            'Accept-Encoding': 'none',\n            'Accept-Language': 'en-US,en;q=0.8',\n            'Connection': 'keep-alive'\n        }\n\n        req = urllib.request.Request(url, headers=headers)","sourceCodeStart":47,"sourceCodeEnd":83,"githubUrl":"https://github.com/HelloZeroNet/ZeroNet/blob/454c0b2e7e000fda7000cba49027541fbf327b96/plugins/AnnounceBitTorrent/AnnounceBitTorrentPlugin.py#L47-L83","documentation":"In the same UDP announce flow, after tracker.connect() succeeded and announce() was sent, tracker.poll_once() is called to await the tracker's announce reply. If nothing comes back within the poll timeout, AnnounceError(\"No response after %.0fs\") is raised with the elapsed time. The connection worked but the tracker never answered the announce request.","triggerScenarios":"UDP connect handshake succeeded but the announce request was dropped, the tracker is overloaded/rate-limiting, response larger than socket buffer, or the tracker silently ignores unknown info_hashes.","commonSituations":"Busy public trackers dropping announces under load; NAT timeouts between connect and announce; tracker that accepts connections but filters announces from unusual client ports; high-latency networks exceeding the poll timeout.","solutions":["Increase the poll timeout if possible and retry the announce.","Retry periodically — this plugin announces on a schedule, transient failures self-heal.","Verify tracker supports the announce (num_want, info_hash) — some trackers ignore malformed ones.","Fall back to other announce plugins (AnnounceTrackers/AnnounceLocal) for peer discovery.","Check network stability/NAT keepalive settings."],"exampleFix":"// before\nback = tracker.poll_once()\nif not back:\n    raise AnnounceError(\"No response after %.0fs\" % (time.time() - s))\n// after\nback = tracker.poll_once()\nif not back:\n    self.site.log.warning(\"No UDP announce response after %.0fs, will retry\" % (time.time() - s))\n    return []","handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    peers = announce_plugin.announceTrackerUdp(tracker_address, file_info)\nexcept AnnounceError as e:\n    if \"No response\" in str(e):\n        schedule_retry(tracker_address, delay=60)\n    else:\n        log.warning(\"Announce failed: %s\" % e)","preventionTips":["Retry announces on a schedule; transient tracker load causes silent drops","Keep the UDP session alive between connect and announce (short interval)","Prefer trackers known to respond reliably","Check NAT/keepalive settings on long-lived UDP sockets"],"tags":["network","udp","tracker","timeout","announce"],"backgroundTag":"tracker-response-timeout","analyzedSha":"454c0b2e7e000fda7000cba49027541fbf327b96","analyzedAt":"2026-09-02T19:46:57.278Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-10T02:17:09.455Z"}