{"record":{"id":"2a8d1ea92993bdce","repo":"XX-net/XX-Net","slug":"report-connect-closed-s-sni-s-reason-s-except","errorCode":null,"errorMessage":"report_connect_closed %s sni:%s reason:%s except:%r","messagePattern":"report_connect_closed (.+?) sni:(.+?) reason:(.+?) except:%r","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"code/default/x_tunnel/local/cloudflare_front/ip_manager.py","lineNumber":138,"sourceCode":"            self.logger.error(\"report_connect_fail %s sni:%s links:%d reason:%s\", ip, sni, info[\"links\"], reason)\n        else:\n            info[\"links\"] -= 1\n        self.logger.debug(\"ip %s sni:%s connect fail, reason:%s\", ip, sni, reason)\n\n    def report_connect_closed(self, ip_str, sni=None, reason=\"\"):\n        ip, _ = utils.get_ip_port(ip_str)\n        ip = utils.to_str(ip)\n        top_domain = \".\".join(sni.split(\".\")[1:])\n\n        try:\n            info = self._get_domain(top_domain)\n            if info[\"links\"] <= 0:\n                self.logger.error(\"report_connect_closed %s sni:%s links:%d reason:%s\", ip, sni, info[\"links\"], reason)\n            else:\n                info[\"links\"] -= 1\n            self.logger.debug(\"ip %s sni:%s connect closed reason %s\", ip, sni, reason)\n        except Exception as e:\n            self.logger.warn(\"report_connect_closed %s sni:%s reason:%s except:%r\", ip_str, sni, reason, e)\n","sourceCodeStart":120,"sourceCodeEnd":139,"githubUrl":"https://github.com/XX-net/XX-Net/blob/cfa5bc17b67676e467f37ec50766127e0ab5f0aa/code/default/x_tunnel/local/cloudflare_front/ip_manager.py#L120-L139","documentation":"Wrapped warn when report_connect_closed itself raised while updating link counts (e.g. unknown IP/SNI key). Inner error branch also logs when links would go negative, indicating more closes than opens.","triggerScenarios":"A connection closes with an ip/sni combination not in the pool, or double close decrements below zero.","commonSituations":"State file out of sync with runtime connections after crash/restart; IP evicted while connections still open.","solutions":["Restart the front to rebuild ip state","Ensure report_connect_created/closed are paired","If persistent, clear saved ip_manager state files"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    mgr.report_connect_closed(ip, sni, reason)\nexcept Exception:\n    pass  # state already gone; rebuild on restart","preventionTips":["Always pair report_connect_created with report_connect_closed","Rebuild ip state after crashes"],"tags":["cloudflare","ip-manager","connection-tracking"],"backgroundTag":"connection-state-desync","analyzedSha":"cfa5bc17b67676e467f37ec50766127e0ab5f0aa","analyzedAt":"2026-08-27T19:28:28.225Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}