Skip to content

Commit c036b99

Browse files
DnsNameResolver: allow users to skip bind() during bootstrap (#14375)
Motivation: We prefer to bind by default for better debug logging (see #13817). However, some users expressed concerns with this behavior change because it eagerly binds a UDP port even when allocated resolver is not used. Modifications: - Keep default behavior to bind, but allow configuring `null` for `DnsNameResolverBuilder.localAddress(...)` to preserve pre-existing behavior. Result: Users can force pre-existing behavior of lazy port binding on resolve.
1 parent 56a9101 commit c036b99

2 files changed

Lines changed: 9 additions & 4 deletions

File tree

resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolver.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,7 @@ dnsServerAddressStreamProvider, new ThreadLocalNameServerAddressStream(dnsServer
383383
searchDomains, ndots, decodeIdn, false, 0);
384384
}
385385

386+
@SuppressWarnings("deprecation")
386387
DnsNameResolver(
387388
EventLoop eventLoop,
388389
ChannelFactory<? extends DatagramChannel> channelFactory,
@@ -501,11 +502,13 @@ protected void initChannel(DatagramChannel ch) {
501502
}
502503
});
503504

505+
final ChannelFuture future;
504506
if (localAddress == null) {
505-
localAddress = new InetSocketAddress(0);
507+
b.option(ChannelOption.DATAGRAM_CHANNEL_ACTIVE_ON_REGISTRATION, true);
508+
future = b.register();
509+
} else {
510+
future = b.bind(localAddress);
506511
}
507-
508-
ChannelFuture future = b.bind(localAddress);
509512
if (future.isDone()) {
510513
Throwable cause = future.cause();
511514
if (cause != null) {

resolver-dns/src/main/java/io/netty/resolver/dns/DnsNameResolverBuilder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import io.netty.util.internal.logging.InternalLogger;
3030
import io.netty.util.internal.logging.InternalLoggerFactory;
3131

32+
import java.net.InetSocketAddress;
3233
import java.net.SocketAddress;
3334
import java.util.ArrayList;
3435
import java.util.Arrays;
@@ -43,6 +44,7 @@
4344
public final class DnsNameResolverBuilder {
4445

4546
private static final InternalLogger logger = InternalLoggerFactory.getInstance(DnsNameResolverBuilder.class);
47+
static final SocketAddress DEFAULT_LOCAL_ADDRESS = new InetSocketAddress(0);
4648

4749
volatile EventLoop eventLoop;
4850
private ChannelFactory<? extends DatagramChannel> channelFactory;
@@ -52,7 +54,7 @@ public final class DnsNameResolverBuilder {
5254
private DnsCache resolveCache;
5355
private DnsCnameCache cnameCache;
5456
private AuthoritativeDnsServerCache authoritativeDnsServerCache;
55-
private SocketAddress localAddress;
57+
private SocketAddress localAddress = DEFAULT_LOCAL_ADDRESS;
5658
private Integer minTtl;
5759
private Integer maxTtl;
5860
private Integer negativeTtl;

0 commit comments

Comments
 (0)