diff --git a/transport-native-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollChannel.java b/transport-native-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollChannel.java index d332986b6b..64136bb2d7 100644 --- a/transport-native-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollChannel.java +++ b/transport-native-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollChannel.java @@ -23,6 +23,7 @@ import io.netty.channel.EventLoop; import java.io.IOException; import java.net.InetSocketAddress; +import java.net.UnknownHostException; abstract class AbstractEpollChannel extends AbstractChannel { private static final ChannelMetadata DATA = new ChannelMetadata(false); @@ -128,6 +129,12 @@ abstract class AbstractEpollChannel extends AbstractChannel { @Override protected abstract AbstractEpollUnsafe newUnsafe(); + protected static void checkResolvable(InetSocketAddress addr) throws UnknownHostException { + if (addr.isUnresolved()) { + throw new UnknownHostException("Unable to resolve addr " + addr); + } + } + protected abstract class AbstractEpollUnsafe extends AbstractUnsafe { protected boolean readPending; diff --git a/transport-native-epoll/src/main/java/io/netty/channel/epoll/EpollServerSocketChannel.java b/transport-native-epoll/src/main/java/io/netty/channel/epoll/EpollServerSocketChannel.java index 390ca3d0e8..b4aba6e3da 100644 --- a/transport-native-epoll/src/main/java/io/netty/channel/epoll/EpollServerSocketChannel.java +++ b/transport-native-epoll/src/main/java/io/netty/channel/epoll/EpollServerSocketChannel.java @@ -47,6 +47,7 @@ public final class EpollServerSocketChannel extends AbstractEpollChannel impleme @Override protected void doBind(SocketAddress localAddress) throws Exception { InetSocketAddress addr = (InetSocketAddress) localAddress; + checkResolvable(addr); Native.bind(fd, addr.getAddress(), addr.getPort()); local = addr; Native.listen(fd, config.getBacklog()); diff --git a/transport-native-epoll/src/main/java/io/netty/channel/epoll/EpollSocketChannel.java b/transport-native-epoll/src/main/java/io/netty/channel/epoll/EpollSocketChannel.java index 3b0e985001..f053ca8929 100644 --- a/transport-native-epoll/src/main/java/io/netty/channel/epoll/EpollSocketChannel.java +++ b/transport-native-epoll/src/main/java/io/netty/channel/epoll/EpollSocketChannel.java @@ -41,6 +41,7 @@ import java.io.IOException; import java.net.ConnectException; import java.net.InetSocketAddress; import java.net.SocketAddress; +import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; @@ -528,11 +529,13 @@ public final class EpollSocketChannel extends AbstractEpollChannel implements So */ private boolean doConnect(InetSocketAddress remoteAddress, InetSocketAddress localAddress) throws Exception { if (localAddress != null) { + checkResolvable(localAddress); Native.bind(fd, localAddress.getAddress(), localAddress.getPort()); } boolean success = false; try { + checkResolvable(remoteAddress); boolean connected = Native.connect(fd, remoteAddress.getAddress(), remoteAddress.getPort()); if (!connected) {