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);
|