{"record":{"id":"b2c71efabf03b753","repo":"TechnitiumSoftware/DnsServer","slug":"valid-range-is-from-1-to-4","errorCode":null,"errorMessage":"Valid range is from 1 to 4.","messagePattern":"Valid range is from 1 to 4\\.","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Dns/DnsServer.cs","lineNumber":7945,"sourceCode":"        public int ResolverTimeout\n        {\n            get { return _resolverTimeout; }\n            set\n            {\n                if ((value < 1000) || (value > 10000))\n                    throw new ArgumentOutOfRangeException(nameof(ResolverTimeout), \"Valid range is from 1000 to 10000.\");\n\n                _resolverTimeout = value;\n            }\n        }\n\n        public int ResolverConcurrency\n        {\n            get { return _resolverConcurrency; }\n            set\n            {\n                if ((value < 1) || (value > 4))\n                    throw new ArgumentOutOfRangeException(nameof(ResolverConcurrency), \"Valid range is from 1 to 4.\");\n\n                _resolverConcurrency = value;\n            }\n        }\n\n        public int ResolverMaxStackCount\n        {\n            get { return _resolverMaxStackCount; }\n            set\n            {\n                if ((value < 10) || (value > 30))\n                    throw new ArgumentOutOfRangeException(nameof(ResolverMaxStackCount), \"Valid range is from 10 to 30.\");\n\n                _resolverMaxStackCount = value;\n            }\n        }\n\n        public bool SaveCacheToDisk","sourceCodeStart":7927,"sourceCodeEnd":7963,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dns/DnsServer.cs#L7927-L7963","documentation":"Thrown by the ResolverConcurrency property setter when the value is outside [1, 4]. This caps how many concurrent upstream queries the resolver issues per name during resolution (e.g. querying multiple authoritative servers in parallel). The library bounds this to 1–4 to avoid excessive fan-out.","triggerScenarios":"Setting DnsServer.ResolverConcurrency to 0, a negative number, or a value greater than 4.","commonSituations":"Trying to raise concurrency expecting faster resolution; setting 0; reading an uncapped value from config.","solutions":["Use a value in 1–4 inclusive (2 is a reasonable default balancing speed and load).","Clamp external config into the valid range before assignment.","Prefer tuning ResolverRetries/Timeout over pushing concurrency past 4."],"exampleFix":"// before\nserver.ResolverConcurrency = 8;\n\n// after\nserver.ResolverConcurrency = 4;","handlingStrategy":"validation","validationCode":"static int ClampConcurrency(int v) => Math.Clamp(v, 1, 4);\nserver.ResolverConcurrency = ClampConcurrency(configConcurrency);","typeGuard":"static bool IsValidResolverConcurrency(int v) => v >= 1 && v <= 4;","tryCatchPattern":"try { server.ResolverConcurrency = c; }\ncatch (ArgumentOutOfRangeException) { server.ResolverConcurrency = 2; }","preventionTips":["Clamp concurrency from config into 1–4.","Don't try to exceed the cap for performance; tune retries/timeout instead.","Validate before applying to avoid mid-startup exceptions."],"tags":["dns","configuration","validation","resolver","concurrency","limits"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}