diff --git a/ext/nio4r/org/nio4r/Selector.java b/ext/nio4r/org/nio4r/Selector.java index 88e91b0..b959b16 100644 --- a/ext/nio4r/org/nio4r/Selector.java +++ b/ext/nio4r/org/nio4r/Selector.java @@ -7,6 +7,7 @@ import java.nio.channels.Channel; import java.nio.channels.SelectableChannel; import java.nio.channels.SelectionKey; +import java.nio.channels.CancelledKeyException; import org.jruby.Ruby; import org.jruby.RubyArray; @@ -207,7 +208,14 @@ public synchronized IRubyObject select(ThreadContext context, IRubyObject timeou Iterator selectedKeys = this.selector.selectedKeys().iterator(); while(selectedKeys.hasNext()) { SelectionKey key = (SelectionKey)selectedKeys.next(); - processKey(key); + try { + processKey(key); + } catch(CancelledKeyException ie) { + continue; + // TODO: what to do? + //throw runtime.newIOError(ie.getLocalizedMessage()); + } + selectedKeys.remove(); if(block.isGiven()) {