@Override protected SelectionKey register(AbstractSelectableChannel channel, int operations, Object attachment) { if (!provider().equals(channel.provider())) { throw new IllegalSelectorException(); } synchronized (this) { synchronized (unmodifiableKeys) { SelectionKeyImpl selectionKey = new SelectionKeyImpl(channel, operations, attachment, this); mutableKeys.add(selectionKey); ensurePollFdsCapacity(); return selectionKey; } } }
public SelectionKeyImpl(AbstractSelectableChannel channel, int operations, Object attachment, SelectorImpl selector) { this.channel = channel; interestOps = operations; this.selector = selector; attach(attachment); }
@Override public SelectionKey interestOps(int operations) { checkValid(); if ((operations & ~(channel().validOps())) != 0) { throw new IllegalArgumentException(); } synchronized (selector.keysLock) { interestOps = operations; } return this; }
private void preparePollFds() { int i = 1; // Our wakeup pipe comes before all the user's fds. for (SelectionKeyImpl key : mutableKeys) { int interestOps = key.interestOpsNoCheck(); short eventMask = 0; if (((OP_ACCEPT | OP_READ) & interestOps) != 0) { eventMask |= POLLIN; } if (((OP_CONNECT | OP_WRITE) & interestOps) != 0) { eventMask |= POLLOUT; } if (eventMask != 0) { setPollFd(i++, ((FileDescriptorChannel) key.channel()).getFD(), eventMask, key); } } }
pollFd.userData = null; int ops = key.interestOpsNoCheck(); int selectedOps = 0; if ((pollFd.revents & POLLHUP) != 0) { if (key.isConnected()) { selectedOps |= ops & OP_WRITE; } else { if (wasSelected && key.readyOps() != selectedOps) { key.setReadyOps(key.readyOps() | selectedOps); ++readyKeyCount; } else if (!wasSelected) { key.setReadyOps(selectedOps); mutableSelectedKeys.add(key); ++readyKeyCount;
@Override public int readyOps() { checkValid(); return readyOps; }
private void checkValid() { if (!isValid()) { throw new CancelledKeyException(); } }
pollFd.userData = null; int ops = key.interestOpsNoCheck(); int selectedOps = 0; if ((pollFd.revents & POLLHUP) != 0) { if (key.isConnected()) { selectedOps |= ops & OP_WRITE; } else { if (wasSelected && key.readyOps() != selectedOps) { key.setReadyOps(key.readyOps() | selectedOps); ++readyKeyCount; } else if (!wasSelected) { key.setReadyOps(selectedOps); mutableSelectedKeys.add(key); ++readyKeyCount;
private void preparePollFds() { int i = 1; // Our wakeup pipe comes before all the user's fds. for (SelectionKeyImpl key : mutableKeys) { int interestOps = key.interestOpsNoCheck(); short eventMask = 0; if (((OP_ACCEPT | OP_READ) & interestOps) != 0) { eventMask |= POLLIN; } if (((OP_CONNECT | OP_WRITE) & interestOps) != 0) { eventMask |= POLLOUT; } if (eventMask != 0) { setPollFd(i++, ((FileDescriptorChannel) key.channel()).getFD(), eventMask, key); } } }
@Override public int interestOps() { checkValid(); synchronized (selector.keysLock) { return interestOps; } }
private void checkValid() { if (!isValid()) { throw new CancelledKeyException(); } }
pollFd.userData = null; int ops = key.interestOpsNoCheck(); int selectedOps = 0; if ((pollFd.revents & POLLHUP) != 0) { if (key.isConnected()) { selectedOps |= ops & OP_WRITE; } else { if (wasSelected && key.readyOps() != selectedOps) { key.setReadyOps(key.readyOps() | selectedOps); ++readyKeyCount; } else if (!wasSelected) { key.setReadyOps(selectedOps); mutableSelectedKeys.add(key); ++readyKeyCount;
@Override public SelectionKey interestOps(int operations) { checkValid(); if ((operations & ~(channel().validOps())) != 0) { throw new IllegalArgumentException(); } synchronized (selector.keysLock) { interestOps = operations; } return this; }
private void preparePollFds() { int i = 1; // Our wakeup pipe comes before all the user's fds. for (SelectionKeyImpl key : mutableKeys) { int interestOps = key.interestOpsNoCheck(); short eventMask = 0; if (((OP_ACCEPT | OP_READ) & interestOps) != 0) { eventMask |= POLLIN; } if (((OP_CONNECT | OP_WRITE) & interestOps) != 0) { eventMask |= POLLOUT; } if (eventMask != 0) { setPollFd(i++, ((FileDescriptorChannel) key.channel()).getFD(), eventMask, key); } } }
@Override public int readyOps() { checkValid(); return readyOps; }
private void checkValid() { if (!isValid()) { throw new CancelledKeyException(); } }
public SelectionKeyImpl(AbstractSelectableChannel channel, int operations, Object attachment, SelectorImpl selector) { this.channel = channel; interestOps = operations; this.selector = selector; attach(attachment); }
@Override protected SelectionKey register(AbstractSelectableChannel channel, int operations, Object attachment) { if (!provider().equals(channel.provider())) { throw new IllegalSelectorException(); } synchronized (this) { synchronized (unmodifiableKeys) { SelectionKeyImpl selectionKey = new SelectionKeyImpl(channel, operations, attachment, this); mutableKeys.add(selectionKey); ensurePollFdsCapacity(); return selectionKey; } } }
pollFd.userData = null; int ops = key.interestOpsNoCheck(); int selectedOps = 0; if ((pollFd.revents & POLLHUP) != 0) { if (key.isConnected()) { selectedOps |= ops & OP_WRITE; } else { if (wasSelected && key.readyOps() != selectedOps) { key.setReadyOps(key.readyOps() | selectedOps); ++readyKeyCount; } else if (!wasSelected) { key.setReadyOps(selectedOps); mutableSelectedKeys.add(key); ++readyKeyCount;
@Override public SelectionKey interestOps(int operations) { checkValid(); if ((operations & ~(channel().validOps())) != 0) { throw new IllegalArgumentException(); } synchronized (selector.keysLock) { interestOps = operations; } return this; }