* @throws IOException if an IO Exception occurs in the underlying socket logic\r
*/\r
public static int write(ByteBuffer buf, NioChannel socket, long writeTimeout) throws IOException {\r
- final SelectionKey key = socket.getIOChannel().keyFor(socket.getPoller().getSelector());\r
+ SelectionKey key = socket.getIOChannel().keyFor(socket.getPoller().getSelector());\r
int written = 0;\r
boolean timedout = false;\r
int keycount = 1; //assume we can write\r
if (timedout) \r
throw new SocketTimeoutException();\r
} finally {\r
-// if (key != null) {\r
-// socket.getPoller().addEvent(\r
-// new Runnable() {\r
-// public void run() {\r
-// key.cancel();\r
-// }\r
-// });\r
-// }\r
+ if (timedout && key != null) {\r
+ cancelKey(socket, key);\r
+ }\r
}\r
return written;\r
}\r
\r
+ private static void cancelKey(final NioChannel socket, final SelectionKey key) {\r
+ socket.getPoller().addEvent(\r
+ new Runnable() {\r
+ public void run() {\r
+ key.cancel();\r
+ }\r
+ });\r
+ }\r
+\r
/**\r
* Performs a blocking read using the bytebuffer for data to be read\r
* If the <code>selector</code> parameter is null, then it will perform a busy read that could\r
if (timedout)\r
throw new SocketTimeoutException();\r
} finally {\r
-// if (key != null) {\r
-// socket.getPoller().addEvent(\r
-// new Runnable() {\r
-// public void run() {\r
-// key.cancel();\r
-// }\r
-// });\r
-// }\r
+ if (timedout && key != null) {\r
+ cancelKey(socket,key);\r
+ }\r
}\r
return read;\r
}\r