public void close(SocketChannel ch) { if (!listener.handleConnectionClose(ch)) return; try { ch.close(); } catch (IOException e) { e.printStackTrace(); } ch.keyFor(selector).cancel(); synchronized (changeRequests) { Iterator changes = changeRequests.iterator(); while (changes.hasNext()) { ChangeRequest req = (ChangeRequest) changes.next(); if (req.socket == ch) { changeRequests.remove(req); break; } } } }