Use NIO methods when using Java7+ in the NIO transport
Motivation: We use often javachannel().socket().* in NIO as these methods exists in java6. The problem is that these will throw often very general Exceptions (Like SocketException) while it is more expected to throw the Exceptions listed in the nio interfaces. When possible we should use the new methods available in java7+ which throw the correct exceptions. Modifications: Check for java version and depending on it using the socket or the javachannel. Result: Throw expected Exceptions.
This commit is contained in:
parent
7d115449d0
commit
0395600d92
4
pom.xml
4
pom.xml
@ -642,9 +642,11 @@
|
||||
|
||||
<ignore>java.util.zip.Deflater</ignore>
|
||||
|
||||
<!-- Used for NIO UDP multicast -->
|
||||
<!-- Used for NIO -->
|
||||
<ignore>java.nio.channels.DatagramChannel</ignore>
|
||||
<ignore>java.nio.channels.MembershipKey</ignore>
|
||||
<ignore>java.nio.channels.ServerSocketChannel</ignore>
|
||||
<ignore>java.nio.channels.SocketChannel</ignore>
|
||||
<ignore>java.net.StandardProtocolFamily</ignore>
|
||||
<ignore>java.nio.channels.spi.SelectorProvider</ignore>
|
||||
|
||||
|
@ -189,14 +189,22 @@ public final class NioDatagramChannel
|
||||
|
||||
@Override
|
||||
protected void doBind(SocketAddress localAddress) throws Exception {
|
||||
javaChannel().socket().bind(localAddress);
|
||||
doBind0(localAddress);
|
||||
}
|
||||
|
||||
private void doBind0(SocketAddress localAddress) throws Exception {
|
||||
if (PlatformDependent.javaVersion() >= 7) {
|
||||
javaChannel().bind(localAddress);
|
||||
} else {
|
||||
javaChannel().socket().bind(localAddress);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean doConnect(SocketAddress remoteAddress,
|
||||
SocketAddress localAddress) throws Exception {
|
||||
if (localAddress != null) {
|
||||
javaChannel().socket().bind(localAddress);
|
||||
doBind0(localAddress);
|
||||
}
|
||||
|
||||
boolean success = false;
|
||||
|
@ -21,6 +21,7 @@ import io.netty.channel.ChannelOutboundBuffer;
|
||||
import io.netty.channel.nio.AbstractNioMessageChannel;
|
||||
import io.netty.channel.socket.DefaultServerSocketChannelConfig;
|
||||
import io.netty.channel.socket.ServerSocketChannelConfig;
|
||||
import io.netty.util.internal.PlatformDependent;
|
||||
import io.netty.util.internal.logging.InternalLogger;
|
||||
import io.netty.util.internal.logging.InternalLoggerFactory;
|
||||
|
||||
@ -122,7 +123,11 @@ public class NioServerSocketChannel extends AbstractNioMessageChannel
|
||||
|
||||
@Override
|
||||
protected void doBind(SocketAddress localAddress) throws Exception {
|
||||
javaChannel().socket().bind(localAddress, config.getBacklog());
|
||||
if (PlatformDependent.javaVersion() >= 7) {
|
||||
javaChannel().bind(localAddress, config.getBacklog());
|
||||
} else {
|
||||
javaChannel().socket().bind(localAddress, config.getBacklog());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -29,6 +29,7 @@ import io.netty.channel.socket.DefaultSocketChannelConfig;
|
||||
import io.netty.channel.socket.ServerSocketChannel;
|
||||
import io.netty.channel.socket.SocketChannelConfig;
|
||||
import io.netty.util.concurrent.GlobalEventExecutor;
|
||||
import io.netty.util.internal.PlatformDependent;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.InetSocketAddress;
|
||||
@ -175,13 +176,38 @@ public class NioSocketChannel extends AbstractNioByteChannel implements io.netty
|
||||
|
||||
private void shutdownOutput0(final ChannelPromise promise) {
|
||||
try {
|
||||
javaChannel().socket().shutdownOutput();
|
||||
shutdownOutput0();
|
||||
promise.setSuccess();
|
||||
} catch (Throwable t) {
|
||||
promise.setFailure(t);
|
||||
}
|
||||
}
|
||||
|
||||
private void shutdownOutput0() throws Exception {
|
||||
if (PlatformDependent.javaVersion() >= 7) {
|
||||
javaChannel().shutdownOutput();
|
||||
} else {
|
||||
javaChannel().socket().shutdownOutput();
|
||||
}
|
||||
}
|
||||
|
||||
private void shutdownInput0(final ChannelPromise promise) {
|
||||
try {
|
||||
shutdownInput0();
|
||||
promise.setSuccess();
|
||||
} catch (Throwable t) {
|
||||
promise.setFailure(t);
|
||||
}
|
||||
}
|
||||
|
||||
private void shutdownInput0() throws Exception {
|
||||
if (PlatformDependent.javaVersion() >= 7) {
|
||||
javaChannel().shutdownInput();
|
||||
} else {
|
||||
javaChannel().socket().shutdownInput();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected SocketAddress localAddress0() {
|
||||
return javaChannel().socket().getLocalSocketAddress();
|
||||
@ -194,13 +220,21 @@ public class NioSocketChannel extends AbstractNioByteChannel implements io.netty
|
||||
|
||||
@Override
|
||||
protected void doBind(SocketAddress localAddress) throws Exception {
|
||||
javaChannel().socket().bind(localAddress);
|
||||
doBind0(localAddress);
|
||||
}
|
||||
|
||||
private void doBind0(SocketAddress localAddress) throws Exception {
|
||||
if (PlatformDependent.javaVersion() >= 7) {
|
||||
javaChannel().bind(localAddress);
|
||||
} else {
|
||||
javaChannel().socket().bind(localAddress);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean doConnect(SocketAddress remoteAddress, SocketAddress localAddress) throws Exception {
|
||||
if (localAddress != null) {
|
||||
javaChannel().socket().bind(localAddress);
|
||||
doBind0(localAddress);
|
||||
}
|
||||
|
||||
boolean success = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user