cool.io 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|