Blob Blame History Raw
From 5dd60622ba3754e6c526ee0a69dd20c282738d74 Mon Sep 17 00:00:00 2001
From: Roland Grunberg <rgrunber@redhat.com>
Date: Fri, 10 Jul 2015 14:22:14 -0400
Subject: [PATCH] Implement SO_LINGER.

Apache httpcpomponents-core 4.4 calls setSoLinger.
---
 .../java/com/spotify/docker/client/ApacheUnixSocket.java  | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git src/main/java/com/spotify/docker/client/ApacheUnixSocket.java src/main/java/com/spotify/docker/client/ApacheUnixSocket.java
index 851ed1c..5a45234 100644
--- src/main/java/com/spotify/docker/client/ApacheUnixSocket.java
+++ src/main/java/com/spotify/docker/client/ApacheUnixSocket.java
@@ -48,6 +48,7 @@ public class ApacheUnixSocket extends Socket {
 
   private final UnixSocketChannel inner;
   private SocketAddress addr;
+  private int lingerTime;
 
   private final Queue<SocketOptionSetter> optionsToSet = Queues.newArrayDeque();
 
@@ -162,12 +163,14 @@ public class ApacheUnixSocket extends Socket {
 
   @Override
   public void setSoLinger(final boolean on, final int linger) throws SocketException {
-    throw new UnsupportedOperationException("Unimplemented");
+    if (on) {
+      lingerTime = linger;
+    }
   }
 
   @Override
   public int getSoLinger() throws SocketException {
-    throw new UnsupportedOperationException("Unimplemented");
+    return lingerTime;
   }
 
   @Override
@@ -257,6 +260,14 @@ public class ApacheUnixSocket extends Socket {
 
   @Override
   public synchronized void close() throws IOException {
+    if (lingerTime > 0) {
+      try {
+        Thread.sleep(lingerTime * 1000);
+      } catch (InterruptedException e) {
+      }
+    }
+    shutdownInput();
+    shutdownOutput();
     inner.close();
   }
 
-- 
2.1.0