TechnitiumSoftware/DnsServer · error · ArgumentOutOfRangeException

EDNS Client Subnet IPv4 prefix length cannot be greater than

Error message

EDNS Client Subnet IPv4 prefix length cannot be greater than 32.

What it means

Thrown by the EDnsClientSubnetIPv4PrefixLength property setter when the byte value exceeds 32. An IPv4 prefix length cannot exceed 32 bits (the full address width). The value is used for EDNS Client Subnet (ECS) responses to clients.

Source

Thrown at DnsServerCore/Dns/DnsServer.cs:7346

                                _cacheZoneManager.DeleteEDnsClientSubnetData();
                            }
                            catch (Exception ex)
                            {
                                _log.Write(ex);
                            }
                        });
                    }
                }
            }
        }

        public byte EDnsClientSubnetIPv4PrefixLength
        {
            get { return _eDnsClientSubnetIPv4PrefixLength; }
            set
            {
                if (value > 32)
                    throw new ArgumentOutOfRangeException(nameof(EDnsClientSubnetIPv4PrefixLength), "EDNS Client Subnet IPv4 prefix length cannot be greater than 32.");

                _eDnsClientSubnetIPv4PrefixLength = value;
            }
        }

        public byte EDnsClientSubnetIPv6PrefixLength
        {
            get { return _eDnsClientSubnetIPv6PrefixLength; }
            set
            {
                if (value > 64)
                    throw new ArgumentOutOfRangeException(nameof(EDnsClientSubnetIPv6PrefixLength), "EDNS Client Subnet IPv6 prefix length cannot be greater than 64.");

                _eDnsClientSubnetIPv6PrefixLength = value;
            }
        }

        public NetworkAddress EDnsClientSubnetIpv4Override

View on GitHub (pinned to d0484b6c1e)

Solutions

  1. Set the value to 32 or less (commonly /24 for ECS privacy).
  2. Verify the config field is for IPv4, not IPv6.

Example fix

// before
server.EDnsClientSubnetIPv4PrefixLength = 56; // throws

// after
server.EDnsClientSubnetIPv4PrefixLength = 24;
Defensive patterns

Strategy: validation

Validate before calling

byte v4Prefix = (byte)Math.Min(value, 32);
server.EDnsClientSubnetIPv4PrefixLength = v4Prefix;

Type guard

static bool IsValidV4Prefix(byte p) => p <= 32;

Try / catch

try { server.EDnsClientSubnetIPv4PrefixLength = value; }
catch (ArgumentOutOfRangeException) { server.EDnsClientSubnetIPv4PrefixLength = 24; }

Prevention

When it happens

Trigger: Setting server.EDnsClientSubnetIPv4PrefixLength to a byte > 32.

Common situations: Confusing IPv4 and IPv6 prefix lengths; loading a config with a typo; copying a /64-style IPv6 value into the IPv4 field.

Related errors


AI-assisted analysis of TechnitiumSoftware/DnsServer@d0484b6c1e (2026-08-13). Data as JSON: /api/errors/827a96d76bf8e8f3. Report an issue: GitHub.