diff --git a/src/main/java/io/vlingo/wire/channel/SocketChannelSelectionProcessorActor.java b/src/main/java/io/vlingo/wire/channel/SocketChannelSelectionProcessorActor.java
index <HASH>..<HASH> 100644
--- a/src/main/java/io/vlingo/wire/channel/SocketChannelSelectionProcessorActor.java
+++ b/src/main/java/io/vlingo/wire/channel/SocketChannelSelectionProcessorActor.java
@@ -134,6 +134,19 @@ public class SocketChannelSelectionProcessorActor extends Actor
   // internal implementation
   //=========================================
 
+  private void close(final SocketChannel channel, final SelectionKey key) {
+    try {
+      channel.close();
+    } catch (Exception e) {
+      // already closed; ignore
+    }
+    try {
+      key.cancel();
+    } catch (Exception e) {
+      // already cancelled/closed; ignore
+    }
+  }
+
   private Selector open() {
     try {
       return Selector.open();
@@ -196,8 +209,7 @@ public class SocketChannelSelectionProcessorActor extends Actor
     }
 
     if (bytesRead == -1) {
-      channel.close();
-      key.cancel();
+      close(channel, key);
     }
 
     if (totalBytesRead > 0) {
Safe close() of channel and cancel() of key.