{"record":{"id":"b1acc2a2b372b434","repo":"XX-net/XX-Net","slug":"get-timeout-list-sn-d-sent-f-retry-f","errorCode":null,"errorMessage":"get_timeout_list sn:%d sent:%f retry:%f","messagePattern":"get_timeout_list sn:(.+?) sent:(.+?) retry:(.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"code/default/x_tunnel/local/base_container.py","lineNumber":355,"sourceCode":"                self.logger.warn(\"mark_sn_timeout sn:%d t:%f\", sn, server_time - t)\n                self.timeout_sn_list[sn] = {\n                    \"server_send_time\": t,\n                }\n            elif t > self.timeout_sn_list[sn][\"server_send_time\"]:\n                self.logger.warn(\"mark_sn_timeout renew sn:%d t:%f\", sn, server_time - t)\n                self.timeout_sn_list[sn][\"server_send_time\"] = t\n\n    def get_timeout_list(self, server_time, timeout):\n        sn_list = []\n        with self.lock:\n            for sn, info in self.timeout_sn_list.items():\n                if server_time - info[\"server_send_time\"] < timeout:\n                    continue\n\n                if server_time - info.get(\"retry_time\", server_time) < timeout:\n                    continue\n\n                self.logger.warn(\"get_timeout_list sn:%d sent:%f retry:%f\", sn, server_time - info[\"server_send_time\"],\n                                 server_time - info.get(\"retry_time\", server_time))\n                info[\"retry_time\"] = server_time\n                sn_list.append(sn)\n\n        return sn_list\n\n    def is_received(self, sn):\n        if sn < self.next_sn:\n            return True\n\n        if sn in self.block_list:\n            return True\n\n        return False\n\n    def status(self):\n        out_string = \"Block_receive_pool:\\r\\n\"\n        out_string += \" next_sn:%d\\r\\n\" % self.next_sn","sourceCodeStart":337,"sourceCodeEnd":373,"githubUrl":"https://github.com/XX-net/XX-Net/blob/cfa5bc17b67676e467f37ec50766127e0ab5f0aa/code/default/x_tunnel/local/base_container.py#L337-L373","documentation":"Logged in get_timeout_list when an SN has exceeded the timeout both since original send and since last retry, so it is added to the retransmit list and its retry_time is stamped.","triggerScenarios":"server_time - server_send_time >= timeout AND server_time - retry_time >= timeout for an SN in timeout_sn_list, invoked via get_down_sn_timeout_list_pack.","commonSituations":"Sustained uplink loss/congestion; timeout configured too small for RTT.","solutions":["Increase the timeout parameter to comfortably exceed RTT","Check for network congestion or MTU issues","Check server reachability if all SNs time out at once"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set timeout > 2x observed RTT","Watch for MTU blackholes causing persistent timeouts"],"tags":["x-tunnel","timeout","retransmit","scheduler"],"backgroundTag":"packet-retransmission-timeout","analyzedSha":"cfa5bc17b67676e467f37ec50766127e0ab5f0aa","analyzedAt":"2026-08-27T19:28:28.225Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}