cool.io 1.1.1 → 1.2.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.
- data/.travis.yml +1 -1
- data/CHANGES.md +4 -2
- data/Gemfile +1 -1
- data/README.md +2 -1
- data/Rakefile +22 -3
- data/cool.io.gemspec +6 -8
- data/ext/cool.io/extconf.rb +2 -1
- data/ext/cool.io/stat_watcher.c +2 -0
- data/ext/iobuffer/extconf.rb +9 -0
- data/ext/iobuffer/iobuffer.c +765 -0
- data/ext/libev/ev.c +1186 -296
- data/ext/libev/ev.h +123 -107
- data/ext/libev/ev_epoll.c +23 -10
- data/ext/libev/ev_kqueue.c +23 -7
- data/ext/libev/ev_poll.c +4 -4
- data/ext/libev/ev_port.c +9 -3
- data/ext/libev/ev_select.c +10 -6
- data/ext/libev/ev_vars.h +18 -18
- data/ext/libev/ev_win32.c +12 -2
- data/ext/libev/ev_wrap.h +164 -160
- data/lib/cool.io.rb +4 -4
- data/lib/cool.io/custom_require.rb +9 -0
- data/lib/cool.io/dns_resolver.rb +8 -5
- data/lib/cool.io/http_client.rb +4 -3
- data/lib/cool.io/listener.rb +3 -9
- data/lib/cool.io/server.rb +1 -2
- data/lib/cool.io/version.rb +1 -1
- data/spec/async_watcher_spec.rb +1 -1
- data/spec/spec_helper.rb +8 -1
- data/spec/unix_listener_spec.rb +1 -1
- data/spec/unix_server_spec.rb +2 -4
- metadata +35 -29
- checksums.yaml +0 -7
data/lib/cool.io.rb
CHANGED
@@ -4,10 +4,10 @@
|
|
4
4
|
# See file LICENSE for details
|
5
5
|
#++
|
6
6
|
|
7
|
-
require 'iobuffer'
|
8
|
-
|
9
7
|
require "cool.io/version"
|
10
|
-
require "cool.
|
8
|
+
require "cool.io/custom_require"
|
9
|
+
cool_require "iobuffer_ext"
|
10
|
+
cool_require "cool.io_ext"
|
11
11
|
|
12
12
|
require "cool.io/loop"
|
13
13
|
require "cool.io/meta"
|
@@ -29,4 +29,4 @@ end
|
|
29
29
|
module Cool
|
30
30
|
# Allow Coolio module to be referenced as Cool.io
|
31
31
|
def self.io; Coolio; end
|
32
|
-
end
|
32
|
+
end
|
data/lib/cool.io/dns_resolver.rb
CHANGED
@@ -32,15 +32,17 @@ module Coolio
|
|
32
32
|
class DNSResolver < IOWatcher
|
33
33
|
#--
|
34
34
|
# TODO check if it's caching right
|
35
|
-
|
36
|
-
|
35
|
+
if RUBY_PLATFORM =~ /mingw|win32/
|
36
|
+
HOSTS = 'c:\WINDOWS\system32\drivers\etc\hosts'
|
37
|
+
else
|
38
|
+
HOSTS = '/etc/hosts'
|
39
|
+
end
|
37
40
|
DNS_PORT = 53
|
38
41
|
DATAGRAM_SIZE = 512
|
39
42
|
TIMEOUT = 3 # Retry timeout for each datagram sent
|
40
43
|
RETRIES = 4 # Number of retries to attempt
|
41
44
|
# so currently total is 12s before it will err due to timeouts
|
42
45
|
# if it errs due to inability to reach the DNS server [Errno::EHOSTUNREACH], same
|
43
|
-
|
44
46
|
# Query /etc/hosts (or the specified hostfile) for the given host
|
45
47
|
def self.hosts(host, hostfile = HOSTS)
|
46
48
|
hosts = {}
|
@@ -61,8 +63,9 @@ module Coolio
|
|
61
63
|
# use nameservers listed in /etc/resolv.conf
|
62
64
|
def initialize(hostname, *nameservers)
|
63
65
|
if nameservers.empty?
|
64
|
-
|
65
|
-
|
66
|
+
require 'resolv'
|
67
|
+
nameservers = Resolv::DNS::Config.default_config_hash[:nameserver]
|
68
|
+
raise RuntimeError, "no nameservers found" if nameservers.empty? # TODO just call resolve_failed, not raise [also handle Errno::ENOENT)]
|
66
69
|
end
|
67
70
|
|
68
71
|
@nameservers = nameservers
|
data/lib/cool.io/http_client.rb
CHANGED
@@ -5,7 +5,8 @@
|
|
5
5
|
# See file LICENSE for details
|
6
6
|
#++
|
7
7
|
|
8
|
-
require
|
8
|
+
require "cool.io/custom_require"
|
9
|
+
cool_require 'http11_client'
|
9
10
|
|
10
11
|
module Coolio
|
11
12
|
# A simple hash is returned for each request made by HttpClient with
|
@@ -118,8 +119,8 @@ module Coolio
|
|
118
119
|
# == Example
|
119
120
|
#
|
120
121
|
# loop = Coolio::Loop.default
|
121
|
-
# client = Coolio::HttpClient.connect("www.google.com").attach
|
122
|
-
# client.
|
122
|
+
# client = Coolio::HttpClient.connect("www.google.com").attach(loop)
|
123
|
+
# client.request('GET', '/search', query: {q: 'foobar'})
|
123
124
|
# loop.run
|
124
125
|
#
|
125
126
|
class HttpClient < TCPSocket
|
data/lib/cool.io/listener.rb
CHANGED
@@ -21,10 +21,6 @@ module Coolio
|
|
21
21
|
@listen_socket.fileno
|
22
22
|
end
|
23
23
|
|
24
|
-
def listen(backlog)
|
25
|
-
@listen_socket.listen(backlog)
|
26
|
-
end
|
27
|
-
|
28
24
|
# Close the listener
|
29
25
|
def close
|
30
26
|
detach if attached?
|
@@ -57,9 +53,9 @@ module Coolio
|
|
57
53
|
end
|
58
54
|
end
|
59
55
|
|
60
|
-
DEFAULT_BACKLOG = 1024
|
61
|
-
|
62
56
|
class TCPListener < Listener
|
57
|
+
DEFAULT_BACKLOG = 1024
|
58
|
+
|
63
59
|
# Create a new Coolio::TCPListener on the specified address and port.
|
64
60
|
# Accepts the following options:
|
65
61
|
#
|
@@ -91,9 +87,7 @@ module Coolio
|
|
91
87
|
# Optionally, it can also take anyn existing UNIXServer object
|
92
88
|
# and create a Coolio::UNIXListener out of it.
|
93
89
|
def initialize(*args)
|
94
|
-
|
95
|
-
s.instance_eval { listen(DEFAULT_BACKLOG) }
|
96
|
-
super(s)
|
90
|
+
super(::UNIXServer === args.first ? args.first : ::UNIXServer.new(*args))
|
97
91
|
end
|
98
92
|
end
|
99
93
|
end
|
data/lib/cool.io/server.rb
CHANGED
@@ -56,7 +56,7 @@ module Coolio
|
|
56
56
|
raise ArgumentError, "port must be an integer" if nil == port
|
57
57
|
::TCPServer.new(host, port)
|
58
58
|
end
|
59
|
-
listen_socket.instance_eval { listen(
|
59
|
+
listen_socket.instance_eval { listen(1024) } # Change listen backlog to 1024
|
60
60
|
super(listen_socket, klass, *args, &block)
|
61
61
|
end
|
62
62
|
end
|
@@ -68,7 +68,6 @@ module Coolio
|
|
68
68
|
class UNIXServer < Server
|
69
69
|
def initialize(path, klass = UNIXSocket, *args, &block)
|
70
70
|
s = ::UNIXServer === path ? path : ::UNIXServer.new(path)
|
71
|
-
s.instance_eval { listen(DEFAULT_BACKLOG) }
|
72
71
|
super(s, klass, *args, &block)
|
73
72
|
end
|
74
73
|
end
|
data/lib/cool.io/version.rb
CHANGED
data/spec/async_watcher_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -2,4 +2,11 @@ $LOAD_PATH.unshift File.dirname(__FILE__)
|
|
2
2
|
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
3
3
|
|
4
4
|
require 'rspec'
|
5
|
-
require 'cool.io'
|
5
|
+
require 'cool.io'
|
6
|
+
|
7
|
+
RSpec.configure do |c|
|
8
|
+
if RUBY_PLATFORM =~ /mingw|win32/
|
9
|
+
$stderr.puts "Skip some specs on Windows"
|
10
|
+
c.filter_run_excluding :env => :win
|
11
|
+
end
|
12
|
+
end
|
data/spec/unix_listener_spec.rb
CHANGED
data/spec/unix_server_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.expand_path('../spec_helper', __FILE__)
|
2
2
|
require 'tempfile'
|
3
3
|
|
4
|
-
describe Cool.io::UNIXServer do
|
4
|
+
describe Cool.io::UNIXServer, :env => :win do
|
5
5
|
|
6
6
|
before :each do
|
7
7
|
@tmp = Tempfile.new('coolio_unix_server_spec')
|
@@ -11,15 +11,13 @@ describe Cool.io::UNIXServer do
|
|
11
11
|
|
12
12
|
it "creates a new Cool.io::UNIXServer" do
|
13
13
|
listener = Cool.io::UNIXListener.new(@tmp.path)
|
14
|
-
listener.listen(24)
|
15
14
|
File.socket?(@tmp.path).should == true
|
16
15
|
end
|
17
16
|
|
18
17
|
it "builds off an existing ::UNIXServer" do
|
19
18
|
unix_server = ::UNIXServer.new(@tmp.path)
|
20
19
|
File.socket?(@tmp.path).should == true
|
21
|
-
listener = Cool.io::UNIXServer.new(unix_server
|
22
|
-
listener.listen(24)
|
20
|
+
listener = Cool.io::UNIXServer.new(unix_server)
|
23
21
|
File.socket?(@tmp.path).should == true
|
24
22
|
listener.fileno.should == unix_server.fileno
|
25
23
|
end
|
metadata
CHANGED
@@ -1,79 +1,75 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cool.io
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Tony Arcieri
|
9
|
+
- Masahiro Nakagawa
|
8
10
|
autorequire:
|
9
11
|
bindir: bin
|
10
12
|
cert_chain: []
|
11
|
-
date: 2013-
|
13
|
+
date: 2013-05-27 00:00:00.000000000 Z
|
12
14
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: iobuffer
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '>='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 1.0.0
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - '>='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 1.0.0
|
27
15
|
- !ruby/object:Gem::Dependency
|
28
16
|
name: rake-compiler
|
29
17
|
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
30
19
|
requirements:
|
31
20
|
- - ~>
|
32
21
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
22
|
+
version: 0.8.3
|
34
23
|
type: :development
|
35
24
|
prerelease: false
|
36
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
37
27
|
requirements:
|
38
28
|
- - ~>
|
39
29
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
30
|
+
version: 0.8.3
|
41
31
|
- !ruby/object:Gem::Dependency
|
42
32
|
name: rspec
|
43
33
|
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
44
35
|
requirements:
|
45
|
-
- - '>='
|
36
|
+
- - ! '>='
|
46
37
|
- !ruby/object:Gem::Version
|
47
|
-
version: 2.
|
38
|
+
version: 2.13.0
|
48
39
|
type: :development
|
49
40
|
prerelease: false
|
50
41
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
51
43
|
requirements:
|
52
|
-
- - '>='
|
44
|
+
- - ! '>='
|
53
45
|
- !ruby/object:Gem::Version
|
54
|
-
version: 2.
|
46
|
+
version: 2.13.0
|
55
47
|
- !ruby/object:Gem::Dependency
|
56
48
|
name: rdoc
|
57
49
|
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
58
51
|
requirements:
|
59
|
-
- - '>='
|
52
|
+
- - ! '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: 3.6.0
|
62
55
|
type: :development
|
63
56
|
prerelease: false
|
64
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
65
59
|
requirements:
|
66
|
-
- - '>='
|
60
|
+
- - ! '>='
|
67
61
|
- !ruby/object:Gem::Version
|
68
62
|
version: 3.6.0
|
69
63
|
description: Cool.io provides a high performance event framework for Ruby which uses
|
70
64
|
the libev C library
|
71
65
|
email:
|
72
66
|
- tony.arcieri@gmail.com
|
67
|
+
- repeatedly@gmail.com
|
73
68
|
executables: []
|
74
69
|
extensions:
|
75
70
|
- ext/cool.io/extconf.rb
|
76
71
|
- ext/http11_client/extconf.rb
|
72
|
+
- ext/iobuffer/extconf.rb
|
77
73
|
extra_rdoc_files: []
|
78
74
|
files:
|
79
75
|
- .gitignore
|
@@ -112,6 +108,8 @@ files:
|
|
112
108
|
- ext/http11_client/http11_parser.c
|
113
109
|
- ext/http11_client/http11_parser.h
|
114
110
|
- ext/http11_client/http11_parser.rl
|
111
|
+
- ext/iobuffer/extconf.rb
|
112
|
+
- ext/iobuffer/iobuffer.c
|
115
113
|
- ext/libev/Changes
|
116
114
|
- ext/libev/LICENSE
|
117
115
|
- ext/libev/README
|
@@ -130,6 +128,7 @@ files:
|
|
130
128
|
- lib/.gitignore
|
131
129
|
- lib/cool.io.rb
|
132
130
|
- lib/cool.io/async_watcher.rb
|
131
|
+
- lib/cool.io/custom_require.rb
|
133
132
|
- lib/cool.io/dns_resolver.rb
|
134
133
|
- lib/cool.io/dsl.rb
|
135
134
|
- lib/cool.io/eventmachine.rb
|
@@ -153,26 +152,33 @@ files:
|
|
153
152
|
- spec/unix_server_spec.rb
|
154
153
|
homepage: http://coolio.github.com
|
155
154
|
licenses: []
|
156
|
-
metadata: {}
|
157
155
|
post_install_message:
|
158
156
|
rdoc_options: []
|
159
157
|
require_paths:
|
160
158
|
- lib
|
161
159
|
required_ruby_version: !ruby/object:Gem::Requirement
|
160
|
+
none: false
|
162
161
|
requirements:
|
163
|
-
- - '>='
|
162
|
+
- - ! '>='
|
164
163
|
- !ruby/object:Gem::Version
|
165
164
|
version: '0'
|
165
|
+
segments:
|
166
|
+
- 0
|
167
|
+
hash: 3111666693494633054
|
166
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
167
170
|
requirements:
|
168
|
-
- - '>='
|
171
|
+
- - ! '>='
|
169
172
|
- !ruby/object:Gem::Version
|
170
173
|
version: '0'
|
174
|
+
segments:
|
175
|
+
- 0
|
176
|
+
hash: 3111666693494633054
|
171
177
|
requirements: []
|
172
178
|
rubyforge_project:
|
173
|
-
rubygems_version:
|
179
|
+
rubygems_version: 1.8.23
|
174
180
|
signing_key:
|
175
|
-
specification_version:
|
181
|
+
specification_version: 3
|
176
182
|
summary: A cool framework for doing high performance I/O in Ruby
|
177
183
|
test_files:
|
178
184
|
- spec/async_watcher_spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 574129faba4be1f5f42244622d7c1ecc94349bd9
|
4
|
-
data.tar.gz: cf189c4d87b89133afd04a29c4a5e078244d648b
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 037beb60fd9b659e1986885947cc74a77e57004d788dcfd6ac07df4a6196dcd9f784c9a2031759f2bd9b23a667a9f56e4f564b1572b52a9a0549973ecc7df778
|
7
|
-
data.tar.gz: a07fd3da19d0c7fddad53c93c8f4942e5562f1562c5a8a0c323c078dc493004db7bb38f131fe9ca0d70c6d1eee7dd873111088eeaa4e41bbe3701fde780f2090
|