1 /* 2 * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package sun.nio.ch; 27 28 import java.io.IOException; 29 import java.nio.channels.*; 30 import java.nio.channels.spi.*; 31 32 33 /** 34 * An implementation of SelectionKey for Solaris. 35 */ 36 37 class SelectionKeyImpl 38 extends AbstractSelectionKey 39 { 40 41 final SelChImpl channel; // package-private 42 final SelectorImpl selector; // package-private 43 44 // Index for a pollfd array in Selector that this key is registered with 45 private int index; 46 47 private volatile int interestOps; 48 private int readyOps; 49 SelectionKeyImpl(SelChImpl ch, SelectorImpl sel)50 SelectionKeyImpl(SelChImpl ch, SelectorImpl sel) { 51 channel = ch; 52 selector = sel; 53 } 54 channel()55 public SelectableChannel channel() { 56 return (SelectableChannel)channel; 57 } 58 selector()59 public Selector selector() { 60 return selector; 61 } 62 getIndex()63 int getIndex() { // package-private 64 return index; 65 } 66 setIndex(int i)67 void setIndex(int i) { // package-private 68 index = i; 69 } 70 ensureValid()71 private void ensureValid() { 72 if (!isValid()) 73 throw new CancelledKeyException(); 74 } 75 interestOps()76 public int interestOps() { 77 ensureValid(); 78 return interestOps; 79 } 80 interestOps(int ops)81 public SelectionKey interestOps(int ops) { 82 ensureValid(); 83 return nioInterestOps(ops); 84 } 85 readyOps()86 public int readyOps() { 87 ensureValid(); 88 return readyOps; 89 } 90 91 // The nio versions of these operations do not care if a key 92 // has been invalidated. They are for internal use by nio code. 93 nioReadyOps(int ops)94 void nioReadyOps(int ops) { // package-private 95 readyOps = ops; 96 } 97 nioReadyOps()98 int nioReadyOps() { // package-private 99 return readyOps; 100 } 101 nioInterestOps(int ops)102 SelectionKey nioInterestOps(int ops) { // package-private 103 if ((ops & ~channel().validOps()) != 0) 104 throw new IllegalArgumentException(); 105 channel.translateAndSetInterestOps(ops, this); 106 interestOps = ops; 107 return this; 108 } 109 nioInterestOps()110 int nioInterestOps() { // package-private 111 return interestOps; 112 } 113 114 } 115