< prev index next >

src/java.base/windows/classes/sun/nio/ch/WEPollPoller.java

Print this page

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 package sun.nio.ch;
26 
27 import java.io.IOException;
28 import static sun.nio.ch.WEPoll.*;
29 
30 /**
31  * Poller implementation based on wepoll.
32  */
33 class WEPollPoller extends Poller {
34     private static final int MAX_EVENTS_TO_POLL = 256;
35     private static final int ENOENT = 2;
36 
37     private final long handle;
38     private final int event;
39     private final long address;
40 
41     WEPollPoller(boolean read) throws IOException {
42         this.handle = WEPoll.create();








43         this.event = (read) ? EPOLLIN : EPOLLOUT;
44         this.address = WEPoll.allocatePollArray(MAX_EVENTS_TO_POLL);







45     }
46 
47     @Override
48     void implRegister(int fdVal) throws IOException {
49         int err = WEPoll.ctl(handle, EPOLL_CTL_ADD, fdVal, (event | EPOLLONESHOT));
50         if (err != 0)
51             throw new IOException("epoll_ctl failed: " + err);
52     }
53 
54     @Override
55     void implDeregister(int fdVal, boolean polled) {
56         WEPoll.ctl(handle, EPOLL_CTL_DEL, fdVal, 0);
57     }
58 
59     @Override
60     int poll(int timeout) throws IOException {
61         int n = WEPoll.wait(handle, address, MAX_EVENTS_TO_POLL, timeout);
62         int i = 0;
63         while (i < n) {
64             long event = WEPoll.getEvent(address, i);

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 package sun.nio.ch;
26 
27 import java.io.IOException;
28 import static sun.nio.ch.WEPoll.*;
29 
30 /**
31  * Poller implementation based on wepoll.
32  */
33 class WEPollPoller extends Poller {
34     private static final int MAX_EVENTS_TO_POLL = 256;

35 
36     private final long handle;
37     private final int event;
38     private final long address;
39 
40     WEPollPoller(boolean read) throws IOException {
41         long handle =  WEPoll.create();
42         long address;
43         try {
44             address = WEPoll.allocatePollArray(MAX_EVENTS_TO_POLL);
45         } catch (Throwable e) {
46             WEPoll.close(handle);
47             throw e;
48         }
49 
50         this.event = (read) ? EPOLLIN : EPOLLOUT;
51         this.handle = handle;
52         this.address = address;
53     }
54 
55     @Override
56     void close() {
57         WEPoll.close(handle);
58         WEPoll.freePollArray(address);
59     }
60 
61     @Override
62     void implRegister(int fdVal) throws IOException {
63         int err = WEPoll.ctl(handle, EPOLL_CTL_ADD, fdVal, (event | EPOLLONESHOT));
64         if (err != 0)
65             throw new IOException("epoll_ctl failed: " + err);
66     }
67 
68     @Override
69     void implDeregister(int fdVal, boolean polled) {
70         WEPoll.ctl(handle, EPOLL_CTL_DEL, fdVal, 0);
71     }
72 
73     @Override
74     int poll(int timeout) throws IOException {
75         int n = WEPoll.wait(handle, address, MAX_EVENTS_TO_POLL, timeout);
76         int i = 0;
77         while (i < n) {
78             long event = WEPoll.getEvent(address, i);
< prev index next >