import java.nio.channels.SelectionKey;\r
import org.apache.tomcat.util.net.NioEndpoint.KeyAttachment;\r
import org.apache.tomcat.util.net.NioEndpoint.Poller;\r
+import java.nio.channels.CancelledKeyException;\r
\r
/**\r
* Implementation of InputBuffer which provides HTTP request header parsing as\r
if ( !timedOut && nRead == 0 ) \r
try {\r
final SelectionKey key = socket.keyFor(poller.getSelector());\r
- KeyAttachment att = (KeyAttachment)key.attachment();\r
+ final KeyAttachment att = (KeyAttachment)key.attachment();\r
att.setWakeUp(true);\r
\r
poller.addEvent(\r
new Runnable() {\r
public void run() {\r
- if ( key != null ) key.interestOps(SelectionKey.OP_READ);\r
+ try {\r
+ if (key != null) key.interestOps(SelectionKey.OP_READ);\r
+ } catch (CancelledKeyException ckx) {\r
+ try {\r
+ socket.socket().close();\r
+ socket.close();\r
+ att.setWakeUp(false);\r
+ } catch (Exception ignore) {}\r
+ }\r
}\r
});\r
synchronized (att.getMutex()) { att.getMutex().wait(25);}\r
if ( att != null ) att.setWakeUp(false);\r
Runnable r = new Runnable() {\r
public void run() {\r
- if ( key != null ) key.interestOps(SelectionKey.OP_READ);\r
+ try {\r
+ if (key != null) key.interestOps(SelectionKey.OP_READ);\r
+ }catch ( CancelledKeyException ckx ) {\r
+ try {\r
+ socket.socket().close();\r
+ socket.close();\r
+ } catch ( Exception ignore ) {}\r
+ }\r
}\r
};\r
addEvent(r);\r