diff --git a/testsuite/src/test/java/io/netty/testsuite/transport/socket/SocketShutdownOutputBySelfTest.java b/testsuite/src/test/java/io/netty/testsuite/transport/socket/SocketShutdownOutputBySelfTest.java index 0936f6f42e..c61e857b3b 100644 --- a/testsuite/src/test/java/io/netty/testsuite/transport/socket/SocketShutdownOutputBySelfTest.java +++ b/testsuite/src/test/java/io/netty/testsuite/transport/socket/SocketShutdownOutputBySelfTest.java @@ -57,7 +57,7 @@ public class SocketShutdownOutputBySelfTest extends AbstractClientSocketTest { assertFalse(h.ch.isOutputShutdown()); // Make the connection half-closed and ensure read() returns -1. - ch.shutdownOutput(); + ch.shutdownOutput().sync(); assertEquals(-1, s.getInputStream().read()); assertTrue(h.ch.isOpen()); diff --git a/transport/src/main/java/io/netty/channel/socket/aio/AioSocketChannel.java b/transport/src/main/java/io/netty/channel/socket/aio/AioSocketChannel.java index fe5f9c332d..5a726cf1cd 100755 --- a/transport/src/main/java/io/netty/channel/socket/aio/AioSocketChannel.java +++ b/transport/src/main/java/io/netty/channel/socket/aio/AioSocketChannel.java @@ -110,27 +110,31 @@ public class AioSocketChannel extends AbstractAioChannel implements SocketChanne @Override public ChannelFuture shutdownOutput() { - ChannelFuture future = newFuture(); + final ChannelFuture future = newFuture(); EventLoop loop = eventLoop(); if (loop.inEventLoop()) { - try { - javaChannel().shutdownOutput(); - outputShutdown = true; - future.setSuccess(); - } catch (Throwable t) { - future.setFailure(t); - } + shutdownOutput(future); } else { loop.execute(new Runnable() { @Override public void run() { - shutdownOutput(); + shutdownOutput(future); } }); } return future; } + private void shutdownOutput(ChannelFuture future) { + try { + javaChannel().shutdownOutput(); + outputShutdown = true; + future.setSuccess(); + } catch (Throwable t) { + future.setFailure(t); + } + } + @Override protected void doConnect(SocketAddress remoteAddress, SocketAddress localAddress, final ChannelFuture future) { if (localAddress != null) { diff --git a/transport/src/main/java/io/netty/channel/socket/nio/NioSocketChannel.java b/transport/src/main/java/io/netty/channel/socket/nio/NioSocketChannel.java index 2dccff94e2..6a4667fc6e 100755 --- a/transport/src/main/java/io/netty/channel/socket/nio/NioSocketChannel.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/NioSocketChannel.java @@ -110,26 +110,30 @@ public class NioSocketChannel extends AbstractNioByteChannel implements io.netty @Override public ChannelFuture shutdownOutput() { - ChannelFuture future = newFuture(); + final ChannelFuture future = newFuture(); EventLoop loop = eventLoop(); if (loop.inEventLoop()) { - try { - javaChannel().socket().shutdownOutput(); - future.setSuccess(); - } catch (Throwable t) { - future.setFailure(t); - } + shutdownOutput(future); } else { loop.execute(new Runnable() { @Override public void run() { - shutdownOutput(); + shutdownOutput(future); } }); } return future; } + private void shutdownOutput(ChannelFuture future) { + try { + javaChannel().socket().shutdownOutput(); + future.setSuccess(); + } catch (Throwable t) { + future.setFailure(t); + } + } + @Override protected SocketAddress localAddress0() { return javaChannel().socket().getLocalSocketAddress(); diff --git a/transport/src/main/java/io/netty/channel/socket/oio/OioSocketChannel.java b/transport/src/main/java/io/netty/channel/socket/oio/OioSocketChannel.java index aff6189565..400be3a05a 100755 --- a/transport/src/main/java/io/netty/channel/socket/oio/OioSocketChannel.java +++ b/transport/src/main/java/io/netty/channel/socket/oio/OioSocketChannel.java @@ -115,26 +115,30 @@ public class OioSocketChannel extends AbstractOioByteChannel @Override public ChannelFuture shutdownOutput() { - ChannelFuture future = newFuture(); + final ChannelFuture future = newFuture(); EventLoop loop = eventLoop(); if (loop.inEventLoop()) { - try { - socket.shutdownOutput(); - future.setSuccess(); - } catch (Throwable t) { - future.setFailure(t); - } + shutdownOutput(future); } else { loop.execute(new Runnable() { @Override public void run() { - shutdownOutput(); + shutdownOutput(future); } }); } return future; } + private void shutdownOutput(ChannelFuture future) { + try { + socket.shutdownOutput(); + future.setSuccess(); + } catch (Throwable t) { + future.setFailure(t); + } + } + @Override protected SocketAddress localAddress0() { return socket.getLocalSocketAddress();