From 171d7a79cef827bd6be072ee49d45f1b61178e4d Mon Sep 17 00:00:00 2001 From: derklaro Date: Wed, 26 Jan 2022 20:10:09 +0100 Subject: [PATCH] Replace own output stream with wrapping socket channel --- .../dockerjava/transport/UnixSocket.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/docker-java-transport/src/main/java/com/github/dockerjava/transport/UnixSocket.java b/docker-java-transport/src/main/java/com/github/dockerjava/transport/UnixSocket.java index 0a9338771..de447db61 100644 --- a/docker-java-transport/src/main/java/com/github/dockerjava/transport/UnixSocket.java +++ b/docker-java-transport/src/main/java/com/github/dockerjava/transport/UnixSocket.java @@ -6,8 +6,10 @@ import java.net.Socket; import java.net.SocketAddress; import java.net.SocketException; +import java.nio.ByteBuffer; import java.nio.channels.Channels; import java.nio.channels.SocketChannel; +import java.nio.channels.WritableByteChannel; public class UnixSocket extends AbstractSocket { @@ -67,7 +69,7 @@ public OutputStream getOutputStream() throws IOException { throw new SocketException("Socket output is shutdown"); } - return Channels.newOutputStream(socketChannel); + return Channels.newOutputStream(new WrappedWritableByteChannel()); } @Override @@ -85,4 +87,22 @@ public void close() throws IOException { super.close(); this.socketChannel.close(); } + + private class WrappedWritableByteChannel implements WritableByteChannel { + + @Override + public int write(ByteBuffer src) throws IOException { + return UnixSocket.this.socketChannel.write(src); + } + + @Override + public boolean isOpen() { + return UnixSocket.this.socketChannel.isOpen(); + } + + @Override + public void close() throws IOException { + UnixSocket.this.socketChannel.close(); + } + } }