{"record":{"id":"3f2505446b42d6e0","repo":"TechnitiumSoftware/DnsServer","slug":"serve-stale-max-wait-time-valid-range-is-0-to-1800","errorCode":null,"errorMessage":"Serve stale max wait time valid range is 0 to 1800 milliseconds. Default value is 1800 milliseconds.","messagePattern":"Serve stale max wait time valid range is 0 to 1800 milliseconds\\. Default value is 1800 milliseconds\\.","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Dns/DnsServer.cs","lineNumber":7996,"sourceCode":"                        _log.Write(ex);\n                    }\n                }\n            }\n        }\n\n        public bool ServeStale\n        {\n            get { return _serveStale; }\n            set { _serveStale = value; }\n        }\n\n        public int ServeStaleMaxWaitTime\n        {\n            get { return _serveStaleMaxWaitTime; }\n            set\n            {\n                if ((value < 0) || (value > 1800))\n                    throw new ArgumentOutOfRangeException(nameof(ServeStaleMaxWaitTime), \"Serve stale max wait time valid range is 0 to 1800 milliseconds. Default value is 1800 milliseconds.\");\n\n                _serveStaleMaxWaitTime = value;\n            }\n        }\n\n        public int CachePrefetchEligibility\n        {\n            get { return _cachePrefetchEligibility; }\n            set\n            {\n                if (value < 2)\n                    throw new ArgumentOutOfRangeException(nameof(CachePrefetchEligibility), \"Valid value is greater that or equal to 2.\");\n\n                _cachePrefetchEligibility = value;\n            }\n        }\n\n        public int CachePrefetchTrigger","sourceCodeStart":7978,"sourceCodeEnd":8014,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dns/DnsServer.cs#L7978-L8014","documentation":"Thrown by the ServeStaleMaxWaitTime property setter when the value is outside [0, 1800] milliseconds. This controls how long the server waits (when ServeStale is enabled) for a refreshed answer before falling back to serving an expired cached record, with 1800ms being the default maximum.","triggerScenarios":"Setting DnsServer.ServeStaleMaxWaitTime to a negative value or a value greater than 1800 (milliseconds).","commonSituations":"Assuming seconds instead of milliseconds; setting a large value to always prefer fresh answers; setting negative to disable.","solutions":["Supply a millisecond value in 0–1800 (0 means serve stale immediately without waiting).","If your config is in seconds, convert to milliseconds before assigning.","Keep ServeStale = true only when you actually want stale fallback behavior."],"exampleFix":"// before\nserver.ServeStaleMaxWaitTime = 2; // meant 2s; 2ms is fine but likely unintended\n\n// after\nserver.ServeStaleMaxWaitTime = 1800; // default max wait","handlingStrategy":"validation","validationCode":"// config in seconds -> ms, clamped to 0–1800\nstatic int ToStaleWaitMs(int seconds) => Math.Clamp(seconds * 1000, 0, 1800);\nserver.ServeStaleMaxWaitTime = ToStaleWaitMs(configSeconds);","typeGuard":"static bool IsValidStaleWait(int ms) => ms >= 0 && ms <= 1800;","tryCatchPattern":"try { server.ServeStaleMaxWaitTime = ms; }\ncatch (ArgumentOutOfRangeException) { server.ServeStaleMaxWaitTime = 1800; }","preventionTips":["Remember the unit is milliseconds.","Only set ServeStale=true when stale fallback is desired.","Convert and clamp external config in a helper."],"tags":["dns","configuration","validation","cache","resolver","limits"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}