Processes events in the event queue of the Poller. @return true if some events were processed, false if queue was empty
()
| 826 | * @return <code>true</code> if some events were processed, <code>false</code> if queue was empty |
| 827 | */ |
| 828 | public boolean events() { |
| 829 | boolean result = false; |
| 830 | |
| 831 | PollerEvent pe; |
| 832 | for (int i = 0, size = events.size(); i < size && (pe = events.poll()) != null; i++) { |
| 833 | result = true; |
| 834 | NioSocketWrapper socketWrapper = pe.getSocketWrapper(); |
| 835 | SocketChannel sc = socketWrapper.getSocket().getIOChannel(); |
| 836 | int interestOps = pe.getInterestOps(); |
| 837 | if (sc == null) { |
| 838 | if (log.isDebugEnabled()) { |
| 839 | log.debug(sm.getString("endpoint.nio.nullSocketChannel")); |
| 840 | } |
| 841 | socketWrapper.close(); |
| 842 | } else if (interestOps == OP_REGISTER) { |
| 843 | try { |
| 844 | sc.register(getSelector(), SelectionKey.OP_READ, socketWrapper); |
| 845 | } catch (Exception e) { |
| 846 | log.error(sm.getString("endpoint.nio.registerFail"), e); |
| 847 | } |
| 848 | } else { |
| 849 | final SelectionKey key = sc.keyFor(getSelector()); |
| 850 | if (key == null) { |
| 851 | // The key was cancelled (e.g. due to socket closure) |
| 852 | // and removed from the selector while it was being |
| 853 | // processed. Count down the connections at this point |
| 854 | // since it won't have been counted down when the socket |
| 855 | // closed. |
| 856 | socketWrapper.close(); |
| 857 | } else { |
| 858 | final NioSocketWrapper attachment = (NioSocketWrapper) key.attachment(); |
| 859 | if (attachment != null) { |
| 860 | // We are registering the key to start with, reset the fairness counter. |
| 861 | try { |
| 862 | int ops = key.interestOps() | interestOps; |
| 863 | attachment.interestOps(ops); |
| 864 | key.interestOps(ops); |
| 865 | } catch (CancelledKeyException ckx) { |
| 866 | socketWrapper.close(); |
| 867 | } |
| 868 | } else { |
| 869 | socketWrapper.close(); |
| 870 | } |
| 871 | } |
| 872 | } |
| 873 | if (running && eventCache != null) { |
| 874 | pe.reset(); |
| 875 | eventCache.push(pe); |
| 876 | } |
| 877 | } |
| 878 | |
| 879 | return result; |
| 880 | } |
| 881 | |
| 882 | /** |
| 883 | * Registers a newly created socket with the poller. |
no test coverage detected