nio4r 0.4.0 → 0.5.0
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.
- checksums.yaml +7 -0
- data/.travis.yml +13 -0
- data/CHANGES.md +30 -0
- data/Gemfile +2 -1
- data/README.md +9 -2
- 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 +15 -6
- data/ext/nio4r/selector.c +27 -8
- data/lib/nio/selector.rb +13 -14
- data/lib/nio/version.rb +1 -1
- data/lib/nio.rb +4 -2
- data/nio4r.gemspec +8 -2
- data/spec/nio/acceptables_spec.rb +2 -0
- data/spec/nio/monitor_spec.rb +2 -2
- data/spec/nio/selectables/pipe_spec.rb +6 -1
- data/spec/nio/selectables/tcp_socket_spec.rb +3 -3
- data/spec/nio/selector_spec.rb +26 -9
- data/spec/spec_helper.rb +4 -1
- data/spec/support/selectable_examples.rb +0 -1
- metadata +29 -22
|
@@ -18,8 +18,13 @@ describe "IO.pipe" do
|
|
|
18
18
|
let :unwritable_subject do
|
|
19
19
|
reader, pipe = IO.pipe
|
|
20
20
|
|
|
21
|
+
#HACK: On OS X 10.8, this str must be larger than PIPE_BUF. Otherwise,
|
|
22
|
+
# the write is atomic and select() will return writable but write()
|
|
23
|
+
# will throw EAGAIN if there is too little space to write the string
|
|
24
|
+
# TODO: Use FFI to lookup the platform-specific size of PIPE_BUF
|
|
25
|
+
str = "JUNK IN THE TUBES" * 10000
|
|
21
26
|
begin
|
|
22
|
-
pipe.write_nonblock
|
|
27
|
+
pipe.write_nonblock str
|
|
23
28
|
_, writers = select [], [pipe], [], 0
|
|
24
29
|
rescue Errno::EPIPE
|
|
25
30
|
break
|
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
|
3
3
|
describe TCPSocket do
|
|
4
4
|
port_offset = 0
|
|
5
5
|
let(:tcp_port) { 12345 + (port_offset += 1) }
|
|
6
|
-
|
|
6
|
+
|
|
7
7
|
let :readable_subject do
|
|
8
8
|
server = TCPServer.new("localhost", tcp_port)
|
|
9
9
|
sock = TCPSocket.open("localhost", tcp_port)
|
|
@@ -67,7 +67,7 @@ describe TCPSocket do
|
|
|
67
67
|
it_behaves_like "an NIO selectable"
|
|
68
68
|
it_behaves_like "an NIO selectable stream"
|
|
69
69
|
it_behaves_like "an NIO bidirectional stream"
|
|
70
|
-
|
|
70
|
+
|
|
71
71
|
context :connect do
|
|
72
72
|
it "selects writable when connected" do
|
|
73
73
|
selector = NIO::Selector.new
|
|
@@ -85,4 +85,4 @@ describe TCPSocket do
|
|
|
85
85
|
result.unpack('i').first.should be_zero
|
|
86
86
|
end
|
|
87
87
|
end
|
|
88
|
-
end
|
|
88
|
+
end
|
data/spec/nio/selector_spec.rb
CHANGED
|
@@ -19,6 +19,11 @@ describe NIO::Selector do
|
|
|
19
19
|
it "raises TypeError if asked to register non-IO objects" do
|
|
20
20
|
expect { subject.register(42, :r) }.to raise_exception TypeError
|
|
21
21
|
end
|
|
22
|
+
|
|
23
|
+
it "raises when asked to register after closing" do
|
|
24
|
+
subject.close
|
|
25
|
+
expect { subject.register(reader, :r) }.to raise_exception IOError
|
|
26
|
+
end
|
|
22
27
|
end
|
|
23
28
|
|
|
24
29
|
it "knows which IO objects are registered" do
|
|
@@ -34,12 +39,12 @@ describe NIO::Selector do
|
|
|
34
39
|
subject.should_not be_registered(reader)
|
|
35
40
|
monitor.should be_closed
|
|
36
41
|
end
|
|
37
|
-
|
|
42
|
+
|
|
38
43
|
it "reports if it is empty" do
|
|
39
44
|
subject.should be_empty
|
|
40
|
-
|
|
45
|
+
|
|
41
46
|
monitor = subject.register(reader, :r)
|
|
42
|
-
|
|
47
|
+
|
|
43
48
|
subject.should_not be_empty
|
|
44
49
|
end
|
|
45
50
|
|
|
@@ -114,13 +119,25 @@ describe NIO::Selector do
|
|
|
114
119
|
writer << "ohai"
|
|
115
120
|
unready, _ = IO.pipe
|
|
116
121
|
|
|
117
|
-
reader_monitor
|
|
122
|
+
reader_monitor = subject.register(reader, :r)
|
|
118
123
|
unready_monitor = subject.register(unready, :r)
|
|
119
124
|
|
|
120
125
|
selected = subject.select(0)
|
|
121
126
|
selected.size.should == 1
|
|
122
|
-
selected.should include
|
|
123
|
-
selected.should_not include
|
|
127
|
+
selected.should include reader_monitor
|
|
128
|
+
selected.should_not include unready_monitor
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "selects closed IO objects" do
|
|
132
|
+
monitor = subject.register(reader, :r)
|
|
133
|
+
subject.select(0).should be_nil
|
|
134
|
+
|
|
135
|
+
thread = Thread.new { subject.select }
|
|
136
|
+
Thread.pass while thread.status && thread.status != "sleep"
|
|
137
|
+
|
|
138
|
+
writer.close
|
|
139
|
+
selected = thread.value
|
|
140
|
+
selected.should include monitor
|
|
124
141
|
end
|
|
125
142
|
|
|
126
143
|
it "iterates across selected objects with a block" do
|
|
@@ -140,9 +157,9 @@ describe NIO::Selector do
|
|
|
140
157
|
result = subject.select { |monitor| readables << monitor }
|
|
141
158
|
result.should == 2
|
|
142
159
|
|
|
143
|
-
readables.should include
|
|
144
|
-
readables.should include
|
|
145
|
-
readables.should_not include
|
|
160
|
+
readables.should include monitor1
|
|
161
|
+
readables.should include monitor2
|
|
162
|
+
readables.should_not include monitor3
|
|
146
163
|
end
|
|
147
164
|
end
|
|
148
165
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,49 +1,57 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: nio4r
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 0.5.0
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Tony Arcieri
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 2013-08-07 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: rake-compiler
|
|
16
|
-
requirement:
|
|
17
|
-
none: false
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
18
16
|
requirements:
|
|
19
|
-
- -
|
|
17
|
+
- - '>='
|
|
20
18
|
- !ruby/object:Gem::Version
|
|
21
19
|
version: '0'
|
|
22
20
|
type: :development
|
|
23
21
|
prerelease: false
|
|
24
|
-
version_requirements:
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - '>='
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
25
27
|
- !ruby/object:Gem::Dependency
|
|
26
28
|
name: rake
|
|
27
|
-
requirement:
|
|
28
|
-
none: false
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
30
|
requirements:
|
|
30
|
-
- -
|
|
31
|
+
- - '>='
|
|
31
32
|
- !ruby/object:Gem::Version
|
|
32
33
|
version: '0'
|
|
33
34
|
type: :development
|
|
34
35
|
prerelease: false
|
|
35
|
-
version_requirements:
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - '>='
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
36
41
|
- !ruby/object:Gem::Dependency
|
|
37
42
|
name: rspec
|
|
38
|
-
requirement:
|
|
39
|
-
none: false
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
40
44
|
requirements:
|
|
41
|
-
- -
|
|
45
|
+
- - '>='
|
|
42
46
|
- !ruby/object:Gem::Version
|
|
43
47
|
version: '0'
|
|
44
48
|
type: :development
|
|
45
49
|
prerelease: false
|
|
46
|
-
version_requirements:
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - '>='
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
47
55
|
description: New IO for Ruby
|
|
48
56
|
email:
|
|
49
57
|
- tony.arcieri@gmail.com
|
|
@@ -99,29 +107,28 @@ files:
|
|
|
99
107
|
- spec/support/selectable_examples.rb
|
|
100
108
|
- tasks/extension.rake
|
|
101
109
|
- tasks/rspec.rake
|
|
102
|
-
homepage: https://github.com/
|
|
110
|
+
homepage: https://github.com/celluloid/nio4r
|
|
103
111
|
licenses: []
|
|
112
|
+
metadata: {}
|
|
104
113
|
post_install_message:
|
|
105
114
|
rdoc_options: []
|
|
106
115
|
require_paths:
|
|
107
116
|
- lib
|
|
108
117
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
|
-
none: false
|
|
110
118
|
requirements:
|
|
111
|
-
- -
|
|
119
|
+
- - '>='
|
|
112
120
|
- !ruby/object:Gem::Version
|
|
113
121
|
version: '0'
|
|
114
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
|
-
none: false
|
|
116
123
|
requirements:
|
|
117
|
-
- -
|
|
124
|
+
- - '>='
|
|
118
125
|
- !ruby/object:Gem::Version
|
|
119
126
|
version: '0'
|
|
120
127
|
requirements: []
|
|
121
128
|
rubyforge_project:
|
|
122
|
-
rubygems_version:
|
|
129
|
+
rubygems_version: 2.0.3
|
|
123
130
|
signing_key:
|
|
124
|
-
specification_version:
|
|
131
|
+
specification_version: 4
|
|
125
132
|
summary: NIO provides a high performance selector API for monitoring IO objects
|
|
126
133
|
test_files:
|
|
127
134
|
- spec/nio/acceptables_spec.rb
|