diff --git a/CHANGES b/CHANGES
index 85568410ed..0ec2654fb5 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+3471. [bug] The number of UDP dispatches now defaults to
+ the number of CPUs even if -n has been set to
+ a higher value. [RT #30964]
+
3470. [bug] Slave zones could fail to dump when successfully
refreshing after an initial failure. [RT #31276]
diff --git a/bin/named/main.c b/bin/named/main.c
index d43510af3e..a88e0d2f5a 100644
--- a/bin/named/main.c
+++ b/bin/named/main.c
@@ -609,7 +609,9 @@ create_managers(void) {
#ifdef WIN32
ns_g_udpdisp = 1;
#else
- if (ns_g_udpdisp == 0 || ns_g_udpdisp > ns_g_cpus)
+ if (ns_g_udpdisp == 0)
+ ns_g_udpdisp = ns_g_cpus_detected;
+ if (ns_g_udpdisp > ns_g_cpus)
ns_g_udpdisp = ns_g_cpus;
#endif
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
diff --git a/bin/named/named.docbook b/bin/named/named.docbook
index 3de97e6ddf..128ca57283 100644
--- a/bin/named/named.docbook
+++ b/bin/named/named.docbook
@@ -290,9 +290,10 @@
Use #listeners
worker threads to listen for incoming UDP packets on each
address. If not specified, named will
- use all of the worker threads for this purpose; the
- option allows the number to be
- decreased but not increased.
+ use the number of detected CPUs. If
+ has been set to a higher value than the number of CPUs,
+ then may be increased as high as that
+ value, but no higher.