nio4r 0.4.6-java → 0.5.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +7 -2
- data/CHANGES.md +6 -0
- data/Gemfile +1 -0
- data/ext/libev/Changes +57 -0
- data/ext/libev/LICENSE +2 -1
- data/ext/libev/README +8 -8
- data/ext/libev/ev.c +541 -214
- data/ext/libev/ev.h +106 -100
- data/ext/libev/ev_epoll.c +1 -1
- data/ext/libev/ev_kqueue.c +20 -4
- data/ext/libev/ev_vars.h +15 -16
- data/ext/libev/ev_win32.c +12 -2
- data/ext/libev/ev_wrap.h +162 -160
- data/ext/nio4r/libev.h +2 -1
- data/ext/nio4r/org/nio4r/Nio4r.java +5 -1
- data/ext/nio4r/selector.c +6 -0
- data/lib/nio/selector.rb +8 -4
- data/lib/nio/version.rb +1 -1
- data/nio4r.gemspec +1 -1
- data/spec/nio/selectables/tcp_socket_spec.rb +3 -3
- data/spec/nio/selector_spec.rb +8 -3
- data/spec/spec_helper.rb +4 -1
- data/spec/support/selectable_examples.rb +0 -1
- metadata +3 -3
data/ext/libev/ev_win32.c
CHANGED
@@ -48,6 +48,16 @@
|
|
48
48
|
/* for the crt to do something about it */
|
49
49
|
volatile double SIGFPE_REQ = 0.0f;
|
50
50
|
|
51
|
+
static SOCKET
|
52
|
+
ev_tcp_socket (void)
|
53
|
+
{
|
54
|
+
#if EV_USE_WSASOCKET
|
55
|
+
return WSASocket (AF_INET, SOCK_STREAM, 0, 0, 0, 0);
|
56
|
+
#else
|
57
|
+
return socket (AF_INET, SOCK_STREAM, 0);
|
58
|
+
#endif
|
59
|
+
}
|
60
|
+
|
51
61
|
/* oh, the humanity! */
|
52
62
|
static int
|
53
63
|
ev_pipe (int filedes [2])
|
@@ -59,7 +69,7 @@ ev_pipe (int filedes [2])
|
|
59
69
|
SOCKET listener;
|
60
70
|
SOCKET sock [2] = { -1, -1 };
|
61
71
|
|
62
|
-
if ((listener =
|
72
|
+
if ((listener = ev_tcp_socket ()) == INVALID_SOCKET)
|
63
73
|
return -1;
|
64
74
|
|
65
75
|
addr.sin_family = AF_INET;
|
@@ -75,7 +85,7 @@ ev_pipe (int filedes [2])
|
|
75
85
|
if (listen (listener, 1))
|
76
86
|
goto fail;
|
77
87
|
|
78
|
-
if ((sock [0] =
|
88
|
+
if ((sock [0] = ev_tcp_socket ()) == INVALID_SOCKET)
|
79
89
|
goto fail;
|
80
90
|
|
81
91
|
if (connect (sock [0], (struct sockaddr *)&addr, addr_size))
|
data/ext/libev/ev_wrap.h
CHANGED
@@ -1,198 +1,200 @@
|
|
1
1
|
/* DO NOT EDIT, automatically generated by update_ev_wrap */
|
2
2
|
#ifndef EV_WRAP_H
|
3
3
|
#define EV_WRAP_H
|
4
|
-
#define
|
5
|
-
#define mn_now ((loop)->mn_now)
|
6
|
-
#define rtmn_diff ((loop)->rtmn_diff)
|
7
|
-
#define io_blocktime ((loop)->io_blocktime)
|
8
|
-
#define timeout_blocktime ((loop)->timeout_blocktime)
|
9
|
-
#define backend ((loop)->backend)
|
4
|
+
#define acquire_cb ((loop)->acquire_cb)
|
10
5
|
#define activecnt ((loop)->activecnt)
|
11
|
-
#define
|
6
|
+
#define anfdmax ((loop)->anfdmax)
|
7
|
+
#define anfds ((loop)->anfds)
|
8
|
+
#define async_pending ((loop)->async_pending)
|
9
|
+
#define asynccnt ((loop)->asynccnt)
|
10
|
+
#define asyncmax ((loop)->asyncmax)
|
11
|
+
#define asyncs ((loop)->asyncs)
|
12
|
+
#define backend ((loop)->backend)
|
12
13
|
#define backend_fd ((loop)->backend_fd)
|
13
14
|
#define backend_mintime ((loop)->backend_mintime)
|
14
15
|
#define backend_modify ((loop)->backend_modify)
|
15
16
|
#define backend_poll ((loop)->backend_poll)
|
16
|
-
#define
|
17
|
-
#define
|
18
|
-
#define
|
19
|
-
#define
|
20
|
-
#define
|
21
|
-
#define
|
22
|
-
#define rfeeds ((loop)->rfeeds)
|
23
|
-
#define rfeedmax ((loop)->rfeedmax)
|
24
|
-
#define rfeedcnt ((loop)->rfeedcnt)
|
25
|
-
#define evfd ((loop)->evfd)
|
26
|
-
#define evpipe ((loop)->evpipe)
|
27
|
-
#define pipe_w ((loop)->pipe_w)
|
28
|
-
#define pipe_write_wanted ((loop)->pipe_write_wanted)
|
29
|
-
#define pipe_write_skipped ((loop)->pipe_write_skipped)
|
17
|
+
#define checkcnt ((loop)->checkcnt)
|
18
|
+
#define checkmax ((loop)->checkmax)
|
19
|
+
#define checks ((loop)->checks)
|
20
|
+
#define cleanupcnt ((loop)->cleanupcnt)
|
21
|
+
#define cleanupmax ((loop)->cleanupmax)
|
22
|
+
#define cleanups ((loop)->cleanups)
|
30
23
|
#define curpid ((loop)->curpid)
|
31
|
-
#define postfork ((loop)->postfork)
|
32
|
-
#define vec_ri ((loop)->vec_ri)
|
33
|
-
#define vec_ro ((loop)->vec_ro)
|
34
|
-
#define vec_wi ((loop)->vec_wi)
|
35
|
-
#define vec_wo ((loop)->vec_wo)
|
36
|
-
#define vec_eo ((loop)->vec_eo)
|
37
|
-
#define vec_max ((loop)->vec_max)
|
38
|
-
#define polls ((loop)->polls)
|
39
|
-
#define pollmax ((loop)->pollmax)
|
40
|
-
#define pollcnt ((loop)->pollcnt)
|
41
|
-
#define pollidxs ((loop)->pollidxs)
|
42
|
-
#define pollidxmax ((loop)->pollidxmax)
|
43
|
-
#define epoll_events ((loop)->epoll_events)
|
44
|
-
#define epoll_eventmax ((loop)->epoll_eventmax)
|
45
|
-
#define epoll_eperms ((loop)->epoll_eperms)
|
46
24
|
#define epoll_epermcnt ((loop)->epoll_epermcnt)
|
47
25
|
#define epoll_epermmax ((loop)->epoll_epermmax)
|
48
|
-
#define
|
49
|
-
#define
|
50
|
-
#define
|
51
|
-
#define
|
52
|
-
#define kqueue_eventmax ((loop)->kqueue_eventmax)
|
53
|
-
#define port_events ((loop)->port_events)
|
54
|
-
#define port_eventmax ((loop)->port_eventmax)
|
55
|
-
#define iocp ((loop)->iocp)
|
56
|
-
#define fdchanges ((loop)->fdchanges)
|
57
|
-
#define fdchangemax ((loop)->fdchangemax)
|
26
|
+
#define epoll_eperms ((loop)->epoll_eperms)
|
27
|
+
#define epoll_eventmax ((loop)->epoll_eventmax)
|
28
|
+
#define epoll_events ((loop)->epoll_events)
|
29
|
+
#define evpipe ((loop)->evpipe)
|
58
30
|
#define fdchangecnt ((loop)->fdchangecnt)
|
59
|
-
#define
|
60
|
-
#define
|
61
|
-
#define timercnt ((loop)->timercnt)
|
62
|
-
#define periodics ((loop)->periodics)
|
63
|
-
#define periodicmax ((loop)->periodicmax)
|
64
|
-
#define periodiccnt ((loop)->periodiccnt)
|
65
|
-
#define idles ((loop)->idles)
|
66
|
-
#define idlemax ((loop)->idlemax)
|
67
|
-
#define idlecnt ((loop)->idlecnt)
|
68
|
-
#define idleall ((loop)->idleall)
|
69
|
-
#define prepares ((loop)->prepares)
|
70
|
-
#define preparemax ((loop)->preparemax)
|
71
|
-
#define preparecnt ((loop)->preparecnt)
|
72
|
-
#define checks ((loop)->checks)
|
73
|
-
#define checkmax ((loop)->checkmax)
|
74
|
-
#define checkcnt ((loop)->checkcnt)
|
75
|
-
#define forks ((loop)->forks)
|
76
|
-
#define forkmax ((loop)->forkmax)
|
31
|
+
#define fdchangemax ((loop)->fdchangemax)
|
32
|
+
#define fdchanges ((loop)->fdchanges)
|
77
33
|
#define forkcnt ((loop)->forkcnt)
|
78
|
-
#define
|
79
|
-
#define
|
80
|
-
#define cleanupcnt ((loop)->cleanupcnt)
|
81
|
-
#define async_pending ((loop)->async_pending)
|
82
|
-
#define asyncs ((loop)->asyncs)
|
83
|
-
#define asyncmax ((loop)->asyncmax)
|
84
|
-
#define asynccnt ((loop)->asynccnt)
|
85
|
-
#define fs_fd ((loop)->fs_fd)
|
86
|
-
#define fs_w ((loop)->fs_w)
|
34
|
+
#define forkmax ((loop)->forkmax)
|
35
|
+
#define forks ((loop)->forks)
|
87
36
|
#define fs_2625 ((loop)->fs_2625)
|
37
|
+
#define fs_fd ((loop)->fs_fd)
|
88
38
|
#define fs_hash ((loop)->fs_hash)
|
39
|
+
#define fs_w ((loop)->fs_w)
|
40
|
+
#define idleall ((loop)->idleall)
|
41
|
+
#define idlecnt ((loop)->idlecnt)
|
42
|
+
#define idlemax ((loop)->idlemax)
|
43
|
+
#define idles ((loop)->idles)
|
44
|
+
#define invoke_cb ((loop)->invoke_cb)
|
45
|
+
#define io_blocktime ((loop)->io_blocktime)
|
46
|
+
#define iocp ((loop)->iocp)
|
47
|
+
#define kqueue_changecnt ((loop)->kqueue_changecnt)
|
48
|
+
#define kqueue_changemax ((loop)->kqueue_changemax)
|
49
|
+
#define kqueue_changes ((loop)->kqueue_changes)
|
50
|
+
#define kqueue_eventmax ((loop)->kqueue_eventmax)
|
51
|
+
#define kqueue_events ((loop)->kqueue_events)
|
52
|
+
#define kqueue_fd_pid ((loop)->kqueue_fd_pid)
|
53
|
+
#define loop_count ((loop)->loop_count)
|
54
|
+
#define loop_depth ((loop)->loop_depth)
|
55
|
+
#define loop_done ((loop)->loop_done)
|
56
|
+
#define mn_now ((loop)->mn_now)
|
57
|
+
#define now_floor ((loop)->now_floor)
|
58
|
+
#define origflags ((loop)->origflags)
|
59
|
+
#define pending_w ((loop)->pending_w)
|
60
|
+
#define pendingcnt ((loop)->pendingcnt)
|
61
|
+
#define pendingmax ((loop)->pendingmax)
|
62
|
+
#define pendingpri ((loop)->pendingpri)
|
63
|
+
#define pendings ((loop)->pendings)
|
64
|
+
#define periodiccnt ((loop)->periodiccnt)
|
65
|
+
#define periodicmax ((loop)->periodicmax)
|
66
|
+
#define periodics ((loop)->periodics)
|
67
|
+
#define pipe_w ((loop)->pipe_w)
|
68
|
+
#define pipe_write_skipped ((loop)->pipe_write_skipped)
|
69
|
+
#define pipe_write_wanted ((loop)->pipe_write_wanted)
|
70
|
+
#define pollcnt ((loop)->pollcnt)
|
71
|
+
#define pollidxmax ((loop)->pollidxmax)
|
72
|
+
#define pollidxs ((loop)->pollidxs)
|
73
|
+
#define pollmax ((loop)->pollmax)
|
74
|
+
#define polls ((loop)->polls)
|
75
|
+
#define port_eventmax ((loop)->port_eventmax)
|
76
|
+
#define port_events ((loop)->port_events)
|
77
|
+
#define postfork ((loop)->postfork)
|
78
|
+
#define preparecnt ((loop)->preparecnt)
|
79
|
+
#define preparemax ((loop)->preparemax)
|
80
|
+
#define prepares ((loop)->prepares)
|
81
|
+
#define release_cb ((loop)->release_cb)
|
82
|
+
#define rfeedcnt ((loop)->rfeedcnt)
|
83
|
+
#define rfeedmax ((loop)->rfeedmax)
|
84
|
+
#define rfeeds ((loop)->rfeeds)
|
85
|
+
#define rtmn_diff ((loop)->rtmn_diff)
|
89
86
|
#define sig_pending ((loop)->sig_pending)
|
90
87
|
#define sigfd ((loop)->sigfd)
|
91
|
-
#define sigfd_w ((loop)->sigfd_w)
|
92
88
|
#define sigfd_set ((loop)->sigfd_set)
|
93
|
-
#define
|
94
|
-
#define
|
95
|
-
#define
|
89
|
+
#define sigfd_w ((loop)->sigfd_w)
|
90
|
+
#define timeout_blocktime ((loop)->timeout_blocktime)
|
91
|
+
#define timercnt ((loop)->timercnt)
|
92
|
+
#define timermax ((loop)->timermax)
|
93
|
+
#define timers ((loop)->timers)
|
96
94
|
#define userdata ((loop)->userdata)
|
97
|
-
#define
|
98
|
-
#define
|
99
|
-
#define
|
95
|
+
#define vec_eo ((loop)->vec_eo)
|
96
|
+
#define vec_max ((loop)->vec_max)
|
97
|
+
#define vec_ri ((loop)->vec_ri)
|
98
|
+
#define vec_ro ((loop)->vec_ro)
|
99
|
+
#define vec_wi ((loop)->vec_wi)
|
100
|
+
#define vec_wo ((loop)->vec_wo)
|
100
101
|
#else
|
101
102
|
#undef EV_WRAP_H
|
102
|
-
#undef
|
103
|
-
#undef mn_now
|
104
|
-
#undef rtmn_diff
|
105
|
-
#undef io_blocktime
|
106
|
-
#undef timeout_blocktime
|
107
|
-
#undef backend
|
103
|
+
#undef acquire_cb
|
108
104
|
#undef activecnt
|
109
|
-
#undef
|
105
|
+
#undef anfdmax
|
106
|
+
#undef anfds
|
107
|
+
#undef async_pending
|
108
|
+
#undef asynccnt
|
109
|
+
#undef asyncmax
|
110
|
+
#undef asyncs
|
111
|
+
#undef backend
|
110
112
|
#undef backend_fd
|
111
113
|
#undef backend_mintime
|
112
114
|
#undef backend_modify
|
113
115
|
#undef backend_poll
|
114
|
-
#undef
|
115
|
-
#undef
|
116
|
-
#undef
|
117
|
-
#undef
|
118
|
-
#undef
|
119
|
-
#undef
|
120
|
-
#undef rfeeds
|
121
|
-
#undef rfeedmax
|
122
|
-
#undef rfeedcnt
|
123
|
-
#undef evfd
|
124
|
-
#undef evpipe
|
125
|
-
#undef pipe_w
|
126
|
-
#undef pipe_write_wanted
|
127
|
-
#undef pipe_write_skipped
|
116
|
+
#undef checkcnt
|
117
|
+
#undef checkmax
|
118
|
+
#undef checks
|
119
|
+
#undef cleanupcnt
|
120
|
+
#undef cleanupmax
|
121
|
+
#undef cleanups
|
128
122
|
#undef curpid
|
129
|
-
#undef postfork
|
130
|
-
#undef vec_ri
|
131
|
-
#undef vec_ro
|
132
|
-
#undef vec_wi
|
133
|
-
#undef vec_wo
|
134
|
-
#undef vec_eo
|
135
|
-
#undef vec_max
|
136
|
-
#undef polls
|
137
|
-
#undef pollmax
|
138
|
-
#undef pollcnt
|
139
|
-
#undef pollidxs
|
140
|
-
#undef pollidxmax
|
141
|
-
#undef epoll_events
|
142
|
-
#undef epoll_eventmax
|
143
|
-
#undef epoll_eperms
|
144
123
|
#undef epoll_epermcnt
|
145
124
|
#undef epoll_epermmax
|
146
|
-
#undef
|
147
|
-
#undef
|
148
|
-
#undef
|
149
|
-
#undef
|
150
|
-
#undef kqueue_eventmax
|
151
|
-
#undef port_events
|
152
|
-
#undef port_eventmax
|
153
|
-
#undef iocp
|
154
|
-
#undef fdchanges
|
155
|
-
#undef fdchangemax
|
125
|
+
#undef epoll_eperms
|
126
|
+
#undef epoll_eventmax
|
127
|
+
#undef epoll_events
|
128
|
+
#undef evpipe
|
156
129
|
#undef fdchangecnt
|
157
|
-
#undef
|
158
|
-
#undef
|
159
|
-
#undef timercnt
|
160
|
-
#undef periodics
|
161
|
-
#undef periodicmax
|
162
|
-
#undef periodiccnt
|
163
|
-
#undef idles
|
164
|
-
#undef idlemax
|
165
|
-
#undef idlecnt
|
166
|
-
#undef idleall
|
167
|
-
#undef prepares
|
168
|
-
#undef preparemax
|
169
|
-
#undef preparecnt
|
170
|
-
#undef checks
|
171
|
-
#undef checkmax
|
172
|
-
#undef checkcnt
|
173
|
-
#undef forks
|
174
|
-
#undef forkmax
|
130
|
+
#undef fdchangemax
|
131
|
+
#undef fdchanges
|
175
132
|
#undef forkcnt
|
176
|
-
#undef
|
177
|
-
#undef
|
178
|
-
#undef cleanupcnt
|
179
|
-
#undef async_pending
|
180
|
-
#undef asyncs
|
181
|
-
#undef asyncmax
|
182
|
-
#undef asynccnt
|
183
|
-
#undef fs_fd
|
184
|
-
#undef fs_w
|
133
|
+
#undef forkmax
|
134
|
+
#undef forks
|
185
135
|
#undef fs_2625
|
136
|
+
#undef fs_fd
|
186
137
|
#undef fs_hash
|
138
|
+
#undef fs_w
|
139
|
+
#undef idleall
|
140
|
+
#undef idlecnt
|
141
|
+
#undef idlemax
|
142
|
+
#undef idles
|
143
|
+
#undef invoke_cb
|
144
|
+
#undef io_blocktime
|
145
|
+
#undef iocp
|
146
|
+
#undef kqueue_changecnt
|
147
|
+
#undef kqueue_changemax
|
148
|
+
#undef kqueue_changes
|
149
|
+
#undef kqueue_eventmax
|
150
|
+
#undef kqueue_events
|
151
|
+
#undef kqueue_fd_pid
|
152
|
+
#undef loop_count
|
153
|
+
#undef loop_depth
|
154
|
+
#undef loop_done
|
155
|
+
#undef mn_now
|
156
|
+
#undef now_floor
|
157
|
+
#undef origflags
|
158
|
+
#undef pending_w
|
159
|
+
#undef pendingcnt
|
160
|
+
#undef pendingmax
|
161
|
+
#undef pendingpri
|
162
|
+
#undef pendings
|
163
|
+
#undef periodiccnt
|
164
|
+
#undef periodicmax
|
165
|
+
#undef periodics
|
166
|
+
#undef pipe_w
|
167
|
+
#undef pipe_write_skipped
|
168
|
+
#undef pipe_write_wanted
|
169
|
+
#undef pollcnt
|
170
|
+
#undef pollidxmax
|
171
|
+
#undef pollidxs
|
172
|
+
#undef pollmax
|
173
|
+
#undef polls
|
174
|
+
#undef port_eventmax
|
175
|
+
#undef port_events
|
176
|
+
#undef postfork
|
177
|
+
#undef preparecnt
|
178
|
+
#undef preparemax
|
179
|
+
#undef prepares
|
180
|
+
#undef release_cb
|
181
|
+
#undef rfeedcnt
|
182
|
+
#undef rfeedmax
|
183
|
+
#undef rfeeds
|
184
|
+
#undef rtmn_diff
|
187
185
|
#undef sig_pending
|
188
186
|
#undef sigfd
|
189
|
-
#undef sigfd_w
|
190
187
|
#undef sigfd_set
|
191
|
-
#undef
|
192
|
-
#undef
|
193
|
-
#undef
|
188
|
+
#undef sigfd_w
|
189
|
+
#undef timeout_blocktime
|
190
|
+
#undef timercnt
|
191
|
+
#undef timermax
|
192
|
+
#undef timers
|
194
193
|
#undef userdata
|
195
|
-
#undef
|
196
|
-
#undef
|
197
|
-
#undef
|
194
|
+
#undef vec_eo
|
195
|
+
#undef vec_max
|
196
|
+
#undef vec_ri
|
197
|
+
#undef vec_ro
|
198
|
+
#undef vec_wi
|
199
|
+
#undef vec_wo
|
198
200
|
#endif
|
data/ext/nio4r/libev.h
CHANGED
@@ -130,7 +130,7 @@ public class Nio4r implements Library {
|
|
130
130
|
Ruby runtime = context.getRuntime();
|
131
131
|
return this.selector.isOpen() ? runtime.getFalse() : runtime.getTrue();
|
132
132
|
}
|
133
|
-
|
133
|
+
|
134
134
|
@JRubyMethod(name = "empty?")
|
135
135
|
public IRubyObject isEmpty(ThreadContext context) {
|
136
136
|
Ruby runtime = context.getRuntime();
|
@@ -142,6 +142,10 @@ public class Nio4r implements Library {
|
|
142
142
|
Ruby runtime = context.getRuntime();
|
143
143
|
Channel rawChannel = RubyIO.convertToIO(context, io).getChannel();
|
144
144
|
|
145
|
+
if(!this.selector.isOpen()) {
|
146
|
+
throw context.getRuntime().newIOError("selector is closed");
|
147
|
+
}
|
148
|
+
|
145
149
|
if(!(rawChannel instanceof SelectableChannel)) {
|
146
150
|
throw runtime.newArgumentError("not a selectable IO object");
|
147
151
|
}
|
data/ext/nio4r/selector.c
CHANGED
@@ -199,11 +199,17 @@ static VALUE NIO_Selector_register_synchronized(VALUE *args)
|
|
199
199
|
{
|
200
200
|
VALUE self, io, interests, selectables, monitor;
|
201
201
|
VALUE monitor_args[3];
|
202
|
+
struct NIO_Selector *selector;
|
202
203
|
|
203
204
|
self = args[0];
|
204
205
|
io = args[1];
|
205
206
|
interests = args[2];
|
206
207
|
|
208
|
+
Data_Get_Struct(self, struct NIO_Selector, selector);
|
209
|
+
if(selector->closed) {
|
210
|
+
rb_raise(rb_eIOError, "selector is closed");
|
211
|
+
}
|
212
|
+
|
207
213
|
selectables = rb_ivar_get(self, rb_intern("selectables"));
|
208
214
|
monitor = rb_hash_lookup(selectables, io);
|
209
215
|
|
data/lib/nio/selector.rb
CHANGED
@@ -18,6 +18,10 @@ module NIO
|
|
18
18
|
# * :rw - is the IO either readable or writeable?
|
19
19
|
def register(io, interest)
|
20
20
|
@lock.synchronize do
|
21
|
+
if closed?
|
22
|
+
raise IOError, "selector is closed"
|
23
|
+
end
|
24
|
+
|
21
25
|
if monitor = @selectables[io]
|
22
26
|
raise ArgumentError, "this IO is already registered with the selector as #{monitor.interests.inspect}"
|
23
27
|
end
|
@@ -56,7 +60,7 @@ module NIO
|
|
56
60
|
|
57
61
|
ready_readers, ready_writers = Kernel.select readers, writers, [], timeout
|
58
62
|
return unless ready_readers # timeout or wakeup
|
59
|
-
|
63
|
+
|
60
64
|
selected_monitors = Set.new
|
61
65
|
|
62
66
|
ready_readers.each do |io|
|
@@ -71,7 +75,7 @@ module NIO
|
|
71
75
|
selected_monitors << monitor
|
72
76
|
end
|
73
77
|
end
|
74
|
-
|
78
|
+
|
75
79
|
ready_writers.each do |io|
|
76
80
|
monitor = @selectables[io]
|
77
81
|
monitor.readiness = case monitor.readiness
|
@@ -82,7 +86,7 @@ module NIO
|
|
82
86
|
end
|
83
87
|
selected_monitors << monitor
|
84
88
|
end
|
85
|
-
|
89
|
+
|
86
90
|
if block_given?
|
87
91
|
selected_monitors.each do |m|
|
88
92
|
yield m
|
@@ -119,7 +123,7 @@ module NIO
|
|
119
123
|
|
120
124
|
# Is this selector closed?
|
121
125
|
def closed?; @closed end
|
122
|
-
|
126
|
+
|
123
127
|
def empty?
|
124
128
|
@selectables.empty?
|
125
129
|
end
|