eventmachine 1.0.0.rc.4-java → 1.0.1-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 +12 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +1 -2
- data/eventmachine.gemspec +3 -3
- data/ext/ed.cpp +2 -0
- data/ext/em.cpp +10 -0
- data/ext/em.h +5 -1
- data/ext/extconf.rb +3 -2
- data/ext/fastfilereader/extconf.rb +1 -1
- data/ext/rubymain.cpp +14 -14
- data/ext/ssl.cpp +1 -1
- data/lib/em/protocols/smtpclient.rb +1 -1
- data/lib/em/version.rb +1 -1
- data/lib/eventmachine.rb +3 -3
- data/rakelib/package.rake +4 -14
- data/tests/test_set_sock_opt.rb +1 -1
- metadata +257 -243
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## 1.0.1 (February 27, 2013)
|
4
|
+
* use rb_wait_for_single_fd() on ruby 2.0 to fix rb_thread_select() deprecation
|
5
|
+
* fix epoll/kqueue mode in ruby 2.0 by removing calls to rb_enable_interrupt() [#248, #389]
|
6
|
+
* fix memory leak when verifying ssl cerificates [#403]
|
7
|
+
* fix initial connection delay [#393, #374]
|
data/Gemfile
CHANGED
data/eventmachine.gemspec
CHANGED
@@ -13,9 +13,9 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.files = `git ls-files`.split("\n")
|
14
14
|
s.extensions = ["ext/extconf.rb", "ext/fastfilereader/extconf.rb"]
|
15
15
|
|
16
|
-
s.add_development_dependency 'rake-compiler', '~> 0.8.
|
17
|
-
s.add_development_dependency 'yard', ">= 0.
|
18
|
-
|
16
|
+
s.add_development_dependency 'rake-compiler', '~> 0.8.3'
|
17
|
+
s.add_development_dependency 'yard', ">= 0.8.5.2"
|
18
|
+
s.add_development_dependency 'bluecloth' unless RUBY_PLATFORM =~ /java/
|
19
19
|
|
20
20
|
s.summary = 'Ruby/EventMachine library'
|
21
21
|
s.description = "EventMachine implements a fast, single-threaded engine for arbitrary network
|
data/ext/ed.cpp
CHANGED
@@ -460,6 +460,8 @@ ConnectionDescriptor::SetConnectPending
|
|
460
460
|
void ConnectionDescriptor::SetConnectPending(bool f)
|
461
461
|
{
|
462
462
|
bConnectPending = f;
|
463
|
+
if (f == false && NextHeartbeat)
|
464
|
+
MyEventMachine->ClearHeartbeat(NextHeartbeat, this);
|
463
465
|
_UpdateEvents();
|
464
466
|
}
|
465
467
|
|
data/ext/em.cpp
CHANGED
@@ -524,12 +524,17 @@ bool EventMachine_t::_RunEpollOnce()
|
|
524
524
|
|
525
525
|
#ifdef BUILD_FOR_RUBY
|
526
526
|
int ret = 0;
|
527
|
+
|
528
|
+
#ifdef HAVE_RB_WAIT_FOR_SINGLE_FD
|
529
|
+
if ((ret = rb_wait_for_single_fd(epfd, RB_WAITFD_IN|RB_WAITFD_PRI, &tv)) < 1) {
|
530
|
+
#else
|
527
531
|
fd_set fdreads;
|
528
532
|
|
529
533
|
FD_ZERO(&fdreads);
|
530
534
|
FD_SET(epfd, &fdreads);
|
531
535
|
|
532
536
|
if ((ret = rb_thread_select(epfd + 1, &fdreads, NULL, NULL, &tv)) < 1) {
|
537
|
+
#endif
|
533
538
|
if (ret == -1) {
|
534
539
|
assert(errno != EINVAL);
|
535
540
|
assert(errno != EBADF);
|
@@ -598,12 +603,17 @@ bool EventMachine_t::_RunKqueueOnce()
|
|
598
603
|
|
599
604
|
#ifdef BUILD_FOR_RUBY
|
600
605
|
int ret = 0;
|
606
|
+
|
607
|
+
#ifdef HAVE_RB_WAIT_FOR_SINGLE_FD
|
608
|
+
if ((ret = rb_wait_for_single_fd(kqfd, RB_WAITFD_IN|RB_WAITFD_PRI, &tv)) < 1) {
|
609
|
+
#else
|
601
610
|
fd_set fdreads;
|
602
611
|
|
603
612
|
FD_ZERO(&fdreads);
|
604
613
|
FD_SET(kqfd, &fdreads);
|
605
614
|
|
606
615
|
if ((ret = rb_thread_select(kqfd + 1, &fdreads, NULL, NULL, &tv)) < 1) {
|
616
|
+
#endif
|
607
617
|
if (ret == -1) {
|
608
618
|
assert(errno != EINVAL);
|
609
619
|
assert(errno != EBADF);
|
data/ext/em.h
CHANGED
@@ -24,9 +24,13 @@ See the file COPYING for complete licensing information.
|
|
24
24
|
#include <ruby.h>
|
25
25
|
#define EmSelect rb_thread_select
|
26
26
|
|
27
|
+
#ifdef HAVE_RB_WAIT_FOR_SINGLE_FD
|
28
|
+
#include <ruby/io.h>
|
29
|
+
#endif
|
30
|
+
|
27
31
|
#if defined(HAVE_RBTRAP)
|
28
32
|
#include <rubysig.h>
|
29
|
-
#elif defined(
|
33
|
+
#elif defined(HAVE_RB_ENABLE_INTERRUPT)
|
30
34
|
extern "C" {
|
31
35
|
void rb_enable_interrupt(void);
|
32
36
|
void rb_disable_interrupt(void);
|
data/ext/extconf.rb
CHANGED
@@ -71,13 +71,14 @@ add_define "HAVE_INOTIFY" if inotify = have_func('inotify_init', 'sys/inotify.h'
|
|
71
71
|
add_define "HAVE_OLD_INOTIFY" if !inotify && have_macro('__NR_inotify_init', 'sys/syscall.h')
|
72
72
|
add_define 'HAVE_WRITEV' if have_func('writev', 'sys/uio.h')
|
73
73
|
|
74
|
-
have_func('
|
74
|
+
have_func('rb_wait_for_single_fd')
|
75
|
+
have_func('rb_enable_interrupt')
|
75
76
|
have_func('rb_time_new')
|
76
77
|
|
77
78
|
# Minor platform details between *nix and Windows:
|
78
79
|
|
79
80
|
if RUBY_PLATFORM =~ /(mswin|mingw|bccwin)/
|
80
|
-
GNU_CHAIN = ENV['CROSS_COMPILING']
|
81
|
+
GNU_CHAIN = ENV['CROSS_COMPILING'] || $1 == 'mingw'
|
81
82
|
OS_WIN32 = true
|
82
83
|
add_define "OS_WIN32"
|
83
84
|
else
|
@@ -17,7 +17,7 @@ add_define 'BUILD_FOR_RUBY'
|
|
17
17
|
# Minor platform details between *nix and Windows:
|
18
18
|
|
19
19
|
if RUBY_PLATFORM =~ /(mswin|mingw|bccwin)/
|
20
|
-
GNU_CHAIN = ENV['CROSS_COMPILING']
|
20
|
+
GNU_CHAIN = ENV['CROSS_COMPILING'] || $1 == 'mingw'
|
21
21
|
OS_WIN32 = true
|
22
22
|
add_define "OS_WIN32"
|
23
23
|
else
|
data/ext/rubymain.cpp
CHANGED
@@ -233,7 +233,7 @@ static VALUE t_add_oneshot_timer (VALUE self, VALUE interval)
|
|
233
233
|
{
|
234
234
|
const unsigned long f = evma_install_oneshot_timer (FIX2INT (interval));
|
235
235
|
if (!f)
|
236
|
-
rb_raise (rb_eRuntimeError, "ran out of timers; use #set_max_timers to increase limit");
|
236
|
+
rb_raise (rb_eRuntimeError, "%s", "ran out of timers; use #set_max_timers to increase limit");
|
237
237
|
return ULONG2NUM (f);
|
238
238
|
}
|
239
239
|
|
@@ -246,7 +246,7 @@ static VALUE t_start_server (VALUE self, VALUE server, VALUE port)
|
|
246
246
|
{
|
247
247
|
const unsigned long f = evma_create_tcp_server (StringValuePtr(server), FIX2INT(port));
|
248
248
|
if (!f)
|
249
|
-
rb_raise (rb_eRuntimeError, "no acceptor (port is in use or requires root privileges)");
|
249
|
+
rb_raise (rb_eRuntimeError, "%s", "no acceptor (port is in use or requires root privileges)");
|
250
250
|
return ULONG2NUM (f);
|
251
251
|
}
|
252
252
|
|
@@ -269,7 +269,7 @@ static VALUE t_start_unix_server (VALUE self, VALUE filename)
|
|
269
269
|
{
|
270
270
|
const unsigned long f = evma_create_unix_domain_server (StringValuePtr(filename));
|
271
271
|
if (!f)
|
272
|
-
rb_raise (rb_eRuntimeError, "no unix-domain acceptor");
|
272
|
+
rb_raise (rb_eRuntimeError, "%s", "no unix-domain acceptor");
|
273
273
|
return ULONG2NUM (f);
|
274
274
|
}
|
275
275
|
|
@@ -332,7 +332,7 @@ static VALUE t_get_peer_cert (VALUE self, VALUE signature)
|
|
332
332
|
BIO_get_mem_ptr(out, &buf);
|
333
333
|
ret = rb_str_new(buf->data, buf->length);
|
334
334
|
X509_free(cert);
|
335
|
-
|
335
|
+
BIO_free(out);
|
336
336
|
}
|
337
337
|
#endif
|
338
338
|
|
@@ -504,7 +504,7 @@ static VALUE t_connect_server (VALUE self, VALUE server, VALUE port)
|
|
504
504
|
try {
|
505
505
|
const unsigned long f = evma_connect_to_server (NULL, 0, StringValuePtr(server), NUM2INT(port));
|
506
506
|
if (!f)
|
507
|
-
rb_raise (EM_eConnectionError, "no connection");
|
507
|
+
rb_raise (EM_eConnectionError, "%s", "no connection");
|
508
508
|
return ULONG2NUM (f);
|
509
509
|
} catch (std::runtime_error e) {
|
510
510
|
rb_raise (EM_eConnectionError, "%s", e.what());
|
@@ -525,7 +525,7 @@ static VALUE t_bind_connect_server (VALUE self, VALUE bind_addr, VALUE bind_port
|
|
525
525
|
try {
|
526
526
|
const unsigned long f = evma_connect_to_server (StringValuePtr(bind_addr), NUM2INT(bind_port), StringValuePtr(server), NUM2INT(port));
|
527
527
|
if (!f)
|
528
|
-
rb_raise (EM_eConnectionError, "no connection");
|
528
|
+
rb_raise (EM_eConnectionError, "%s", "no connection");
|
529
529
|
return ULONG2NUM (f);
|
530
530
|
} catch (std::runtime_error e) {
|
531
531
|
rb_raise (EM_eConnectionError, "%s", e.what());
|
@@ -541,7 +541,7 @@ static VALUE t_connect_unix_server (VALUE self, VALUE serversocket)
|
|
541
541
|
{
|
542
542
|
const unsigned long f = evma_connect_to_unix_server (StringValuePtr(serversocket));
|
543
543
|
if (!f)
|
544
|
-
rb_raise (rb_eRuntimeError, "no connection");
|
544
|
+
rb_raise (rb_eRuntimeError, "%s", "no connection");
|
545
545
|
return ULONG2NUM (f);
|
546
546
|
}
|
547
547
|
|
@@ -553,7 +553,7 @@ static VALUE t_attach_fd (VALUE self, VALUE file_descriptor, VALUE watch_mode)
|
|
553
553
|
{
|
554
554
|
const unsigned long f = evma_attach_fd (NUM2INT(file_descriptor), watch_mode == Qtrue);
|
555
555
|
if (!f)
|
556
|
-
rb_raise (rb_eRuntimeError, "no connection");
|
556
|
+
rb_raise (rb_eRuntimeError, "%s", "no connection");
|
557
557
|
return ULONG2NUM (f);
|
558
558
|
}
|
559
559
|
|
@@ -703,7 +703,7 @@ static VALUE t_open_udp_socket (VALUE self, VALUE server, VALUE port)
|
|
703
703
|
{
|
704
704
|
const unsigned long f = evma_open_datagram_socket (StringValuePtr(server), FIX2INT(port));
|
705
705
|
if (!f)
|
706
|
-
rb_raise (rb_eRuntimeError, "no datagram socket");
|
706
|
+
rb_raise (rb_eRuntimeError, "%s", "no datagram socket");
|
707
707
|
return ULONG2NUM (f);
|
708
708
|
}
|
709
709
|
|
@@ -805,7 +805,7 @@ static VALUE t_invoke_popen (VALUE self, VALUE cmd)
|
|
805
805
|
int len = RARRAY (cmd)->len;
|
806
806
|
#endif
|
807
807
|
if (len >= 2048)
|
808
|
-
rb_raise (rb_eRuntimeError, "too many arguments to popen");
|
808
|
+
rb_raise (rb_eRuntimeError, "%s", "too many arguments to popen");
|
809
809
|
char *strings [2048];
|
810
810
|
for (int i=0; i < len; i++) {
|
811
811
|
VALUE ix = INT2FIX (i);
|
@@ -834,7 +834,7 @@ static VALUE t_read_keyboard (VALUE self)
|
|
834
834
|
{
|
835
835
|
const unsigned long f = evma_open_keyboard();
|
836
836
|
if (!f)
|
837
|
-
rb_raise (rb_eRuntimeError, "no keyboard reader");
|
837
|
+
rb_raise (rb_eRuntimeError, "%s", "no keyboard reader");
|
838
838
|
return ULONG2NUM (f);
|
839
839
|
}
|
840
840
|
|
@@ -921,7 +921,7 @@ t__epoll_set
|
|
921
921
|
static VALUE t__epoll_set (VALUE self, VALUE val)
|
922
922
|
{
|
923
923
|
if (t__epoll_p(self) == Qfalse)
|
924
|
-
rb_raise (EM_eUnsupported, "epoll is not supported on this platform");
|
924
|
+
rb_raise (EM_eUnsupported, "%s", "epoll is not supported on this platform");
|
925
925
|
|
926
926
|
evma_set_epoll (val == Qtrue ? 1 : 0);
|
927
927
|
return val;
|
@@ -958,7 +958,7 @@ t__kqueue_set
|
|
958
958
|
static VALUE t__kqueue_set (VALUE self, VALUE val)
|
959
959
|
{
|
960
960
|
if (t__kqueue_p(self) == Qfalse)
|
961
|
-
rb_raise (EM_eUnsupported, "kqueue is not supported on this platform");
|
961
|
+
rb_raise (EM_eUnsupported, "%s", "kqueue is not supported on this platform");
|
962
962
|
|
963
963
|
evma_set_kqueue (val == Qtrue ? 1 : 0);
|
964
964
|
return val;
|
@@ -996,7 +996,7 @@ static VALUE t_send_file_data (VALUE self, VALUE signature, VALUE filename)
|
|
996
996
|
|
997
997
|
int b = evma_send_file_data_to_connection (NUM2ULONG (signature), StringValuePtr(filename));
|
998
998
|
if (b == -1)
|
999
|
-
rb_raise(rb_eRuntimeError, "File too large. send_file_data() supports files under 32k.");
|
999
|
+
rb_raise(rb_eRuntimeError, "%s", "File too large. send_file_data() supports files under 32k.");
|
1000
1000
|
if (b > 0) {
|
1001
1001
|
char *err = strerror (b);
|
1002
1002
|
char buf[1024];
|
data/ext/ssl.cpp
CHANGED
@@ -459,7 +459,7 @@ extern "C" int ssl_verify_wrapper(int preverify_ok, X509_STORE_CTX *ctx)
|
|
459
459
|
|
460
460
|
ConnectionDescriptor *cd = dynamic_cast <ConnectionDescriptor*> (Bindable_t::GetObject(binding));
|
461
461
|
result = (cd->VerifySslPeer(buf->data) == true ? 1 : 0);
|
462
|
-
|
462
|
+
BIO_free(out);
|
463
463
|
|
464
464
|
return result;
|
465
465
|
}
|
@@ -271,7 +271,7 @@ module EventMachine
|
|
271
271
|
psw = psw.call
|
272
272
|
end
|
273
273
|
#str = Base64::encode64("\0#{@args[:auth][:username]}\0#{psw}").chomp
|
274
|
-
str = ["\0#{@args[:auth][:username]}\0#{psw}"].pack("m").
|
274
|
+
str = ["\0#{@args[:auth][:username]}\0#{psw}"].pack("m").gsub(/\n/, '')
|
275
275
|
send_data "AUTH PLAIN #{str}\r\n"
|
276
276
|
@responder = :receive_auth_response
|
277
277
|
else
|
data/lib/em/version.rb
CHANGED
data/lib/eventmachine.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
if
|
1
|
+
if defined?(EventMachine.library_type) and EventMachine.library_type == :pure_ruby
|
2
|
+
# assume 'em/pure_ruby' was loaded already
|
3
|
+
elsif RUBY_PLATFORM =~ /java/
|
2
4
|
require 'java'
|
3
5
|
require 'jeventmachine'
|
4
|
-
elsif defined?(EventMachine.library_type) and EventMachine.library_type == :pure_ruby
|
5
|
-
# assume 'em/pure_ruby' was loaded already
|
6
6
|
else
|
7
7
|
begin
|
8
8
|
require 'rubyeventmachine'
|
data/rakelib/package.rake
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
require '
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rubygems/package_task'
|
3
|
+
|
2
4
|
begin
|
3
5
|
require 'rake/extensiontask'
|
4
6
|
require 'rake/javaextensiontask'
|
@@ -12,7 +14,7 @@ rake-compiler gem seems to be missing. Please install it with
|
|
12
14
|
MSG
|
13
15
|
end
|
14
16
|
|
15
|
-
|
17
|
+
Gem::PackageTask.new(GEMSPEC) do |pkg|
|
16
18
|
end
|
17
19
|
|
18
20
|
if RUBY_PLATFORM =~ /java/
|
@@ -84,15 +86,3 @@ def gem_cmd(action, name, *args)
|
|
84
86
|
end
|
85
87
|
|
86
88
|
Rake::Task[:clean].enhance [:clobber_package]
|
87
|
-
|
88
|
-
namespace :gem do
|
89
|
-
desc 'Install gem (and sudo if required)'
|
90
|
-
task :install => :package do
|
91
|
-
gem_cmd(:install, "pkg/#{GEMSPEC.name}-#{GEMSPEC.version}.gem")
|
92
|
-
end
|
93
|
-
|
94
|
-
desc 'Uninstall gem (and sudo if required)'
|
95
|
-
task :uninstall do
|
96
|
-
gem_cmd(:uninstall, "#{GEMSPEC.name}", "-v=#{GEMSPEC.version}")
|
97
|
-
end
|
98
|
-
end
|
data/tests/test_set_sock_opt.rb
CHANGED
@@ -19,7 +19,7 @@ class TestSetSockOpt < Test::Unit::TestCase
|
|
19
19
|
EM.run do
|
20
20
|
EM.connect 'google.com', 80, Module.new {
|
21
21
|
define_method :post_init do
|
22
|
-
val = set_sock_opt Socket::SOL_SOCKET, Socket::
|
22
|
+
val = set_sock_opt Socket::SOL_SOCKET, Socket::SO_BROADCAST, true
|
23
23
|
test.assert_equal 0, val
|
24
24
|
EM.stop
|
25
25
|
end
|
metadata
CHANGED
@@ -1,40 +1,49 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventmachine
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
version: 1.0.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 1.0.1
|
6
6
|
platform: java
|
7
|
-
authors:
|
8
|
-
|
9
|
-
|
10
|
-
autorequire:
|
7
|
+
authors:
|
8
|
+
- Francis Cianfrocca
|
9
|
+
- Aman Gupta
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
13
|
+
date: 2013-02-28 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake-compiler
|
17
|
+
version_requirements: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - "~>"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.8.3
|
22
|
+
none: false
|
23
|
+
requirement: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 0.8.3
|
28
|
+
none: false
|
29
|
+
prerelease: false
|
30
|
+
type: :development
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: yard
|
33
|
+
version_requirements: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.8.5.2
|
38
|
+
none: false
|
39
|
+
requirement: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.8.5.2
|
44
|
+
none: false
|
45
|
+
prerelease: false
|
46
|
+
type: :development
|
38
47
|
description: |-
|
39
48
|
EventMachine implements a fast, single-threaded engine for arbitrary network
|
40
49
|
communications. It's extremely easy to use in Ruby. EventMachine wraps all
|
@@ -46,224 +55,229 @@ description: |-
|
|
46
55
|
are provided with the package, primarily to serve as examples. The real goal
|
47
56
|
of EventMachine is to enable programs to easily interface with other programs
|
48
57
|
using TCP/IP, especially if custom protocols are required.
|
49
|
-
email:
|
50
|
-
|
51
|
-
|
58
|
+
email:
|
59
|
+
- garbagecat10@gmail.com
|
60
|
+
- aman@tmm1.net
|
52
61
|
executables: []
|
53
|
-
|
54
62
|
extensions: []
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
63
|
+
extra_rdoc_files:
|
64
|
+
- README.md
|
65
|
+
- docs/DocumentationGuidesIndex.md
|
66
|
+
- docs/GettingStarted.md
|
67
|
+
- docs/old/ChangeLog
|
68
|
+
- docs/old/DEFERRABLES
|
69
|
+
- docs/old/EPOLL
|
70
|
+
- docs/old/INSTALL
|
71
|
+
- docs/old/KEYBOARD
|
72
|
+
- docs/old/LEGAL
|
73
|
+
- docs/old/LIGHTWEIGHT_CONCURRENCY
|
74
|
+
- docs/old/PURE_RUBY
|
75
|
+
- docs/old/RELEASE_NOTES
|
76
|
+
- docs/old/SMTP
|
77
|
+
- docs/old/SPAWNED_PROCESSES
|
78
|
+
- docs/old/TODO
|
79
|
+
files:
|
80
|
+
- ".gitignore"
|
81
|
+
- ".travis.yml"
|
82
|
+
- ".yardopts"
|
83
|
+
- CHANGELOG.md
|
84
|
+
- GNU
|
85
|
+
- Gemfile
|
86
|
+
- LICENSE
|
87
|
+
- README.md
|
88
|
+
- Rakefile
|
89
|
+
- docs/DocumentationGuidesIndex.md
|
90
|
+
- docs/GettingStarted.md
|
91
|
+
- docs/old/ChangeLog
|
92
|
+
- docs/old/DEFERRABLES
|
93
|
+
- docs/old/EPOLL
|
94
|
+
- docs/old/INSTALL
|
95
|
+
- docs/old/KEYBOARD
|
96
|
+
- docs/old/LEGAL
|
97
|
+
- docs/old/LIGHTWEIGHT_CONCURRENCY
|
98
|
+
- docs/old/PURE_RUBY
|
99
|
+
- docs/old/RELEASE_NOTES
|
100
|
+
- docs/old/SMTP
|
101
|
+
- docs/old/SPAWNED_PROCESSES
|
102
|
+
- docs/old/TODO
|
103
|
+
- eventmachine.gemspec
|
104
|
+
- examples/guides/getting_started/01_eventmachine_echo_server.rb
|
105
|
+
- examples/guides/getting_started/02_eventmachine_echo_server_that_recognizes_exit_command.rb
|
106
|
+
- examples/guides/getting_started/03_simple_chat_server.rb
|
107
|
+
- examples/guides/getting_started/04_simple_chat_server_step_one.rb
|
108
|
+
- examples/guides/getting_started/05_simple_chat_server_step_two.rb
|
109
|
+
- examples/guides/getting_started/06_simple_chat_server_step_three.rb
|
110
|
+
- examples/guides/getting_started/07_simple_chat_server_step_four.rb
|
111
|
+
- examples/guides/getting_started/08_simple_chat_server_step_five.rb
|
112
|
+
- examples/old/ex_channel.rb
|
113
|
+
- examples/old/ex_queue.rb
|
114
|
+
- examples/old/ex_tick_loop_array.rb
|
115
|
+
- examples/old/ex_tick_loop_counter.rb
|
116
|
+
- examples/old/helper.rb
|
117
|
+
- ext/binder.cpp
|
118
|
+
- ext/binder.h
|
119
|
+
- ext/cmain.cpp
|
120
|
+
- ext/ed.cpp
|
121
|
+
- ext/ed.h
|
122
|
+
- ext/em.cpp
|
123
|
+
- ext/em.h
|
124
|
+
- ext/eventmachine.h
|
125
|
+
- ext/extconf.rb
|
126
|
+
- ext/fastfilereader/extconf.rb
|
127
|
+
- ext/fastfilereader/mapper.cpp
|
128
|
+
- ext/fastfilereader/mapper.h
|
129
|
+
- ext/fastfilereader/rubymain.cpp
|
130
|
+
- ext/kb.cpp
|
131
|
+
- ext/page.cpp
|
132
|
+
- ext/page.h
|
133
|
+
- ext/pipe.cpp
|
134
|
+
- ext/project.h
|
135
|
+
- ext/rubymain.cpp
|
136
|
+
- ext/ssl.cpp
|
137
|
+
- ext/ssl.h
|
138
|
+
- java/.classpath
|
139
|
+
- java/.project
|
140
|
+
- java/src/com/rubyeventmachine/EmReactor.java
|
141
|
+
- java/src/com/rubyeventmachine/EmReactorException.java
|
142
|
+
- java/src/com/rubyeventmachine/EventableChannel.java
|
143
|
+
- java/src/com/rubyeventmachine/EventableDatagramChannel.java
|
144
|
+
- java/src/com/rubyeventmachine/EventableSocketChannel.java
|
145
|
+
- lib/em/buftok.rb
|
146
|
+
- lib/em/callback.rb
|
147
|
+
- lib/em/channel.rb
|
148
|
+
- lib/em/completion.rb
|
149
|
+
- lib/em/connection.rb
|
150
|
+
- lib/em/deferrable.rb
|
151
|
+
- lib/em/deferrable/pool.rb
|
152
|
+
- lib/em/file_watch.rb
|
153
|
+
- lib/em/future.rb
|
154
|
+
- lib/em/iterator.rb
|
155
|
+
- lib/em/messages.rb
|
156
|
+
- lib/em/pool.rb
|
157
|
+
- lib/em/process_watch.rb
|
158
|
+
- lib/em/processes.rb
|
159
|
+
- lib/em/protocols.rb
|
160
|
+
- lib/em/protocols/header_and_content.rb
|
161
|
+
- lib/em/protocols/httpclient.rb
|
162
|
+
- lib/em/protocols/httpclient2.rb
|
163
|
+
- lib/em/protocols/line_and_text.rb
|
164
|
+
- lib/em/protocols/line_protocol.rb
|
165
|
+
- lib/em/protocols/linetext2.rb
|
166
|
+
- lib/em/protocols/memcache.rb
|
167
|
+
- lib/em/protocols/object_protocol.rb
|
168
|
+
- lib/em/protocols/postgres3.rb
|
169
|
+
- lib/em/protocols/saslauth.rb
|
170
|
+
- lib/em/protocols/smtpclient.rb
|
171
|
+
- lib/em/protocols/smtpserver.rb
|
172
|
+
- lib/em/protocols/socks4.rb
|
173
|
+
- lib/em/protocols/stomp.rb
|
174
|
+
- lib/em/protocols/tcptest.rb
|
175
|
+
- lib/em/pure_ruby.rb
|
176
|
+
- lib/em/queue.rb
|
177
|
+
- lib/em/resolver.rb
|
178
|
+
- lib/em/spawnable.rb
|
179
|
+
- lib/em/streamer.rb
|
180
|
+
- lib/em/threaded_resource.rb
|
181
|
+
- lib/em/tick_loop.rb
|
182
|
+
- lib/em/timers.rb
|
183
|
+
- lib/em/version.rb
|
184
|
+
- lib/eventmachine.rb
|
185
|
+
- lib/jeventmachine.rb
|
186
|
+
- rakelib/cpp.rake_example
|
187
|
+
- rakelib/package.rake
|
188
|
+
- rakelib/test.rake
|
189
|
+
- tests/client.crt
|
190
|
+
- tests/client.key
|
191
|
+
- tests/em_test_helper.rb
|
192
|
+
- tests/test_attach.rb
|
193
|
+
- tests/test_basic.rb
|
194
|
+
- tests/test_channel.rb
|
195
|
+
- tests/test_completion.rb
|
196
|
+
- tests/test_connection_count.rb
|
197
|
+
- tests/test_defer.rb
|
198
|
+
- tests/test_deferrable.rb
|
199
|
+
- tests/test_epoll.rb
|
200
|
+
- tests/test_error_handler.rb
|
201
|
+
- tests/test_exc.rb
|
202
|
+
- tests/test_file_watch.rb
|
203
|
+
- tests/test_futures.rb
|
204
|
+
- tests/test_get_sock_opt.rb
|
205
|
+
- tests/test_handler_check.rb
|
206
|
+
- tests/test_hc.rb
|
207
|
+
- tests/test_httpclient.rb
|
208
|
+
- tests/test_httpclient2.rb
|
209
|
+
- tests/test_idle_connection.rb
|
210
|
+
- tests/test_inactivity_timeout.rb
|
211
|
+
- tests/test_kb.rb
|
212
|
+
- tests/test_ltp.rb
|
213
|
+
- tests/test_ltp2.rb
|
214
|
+
- tests/test_next_tick.rb
|
215
|
+
- tests/test_object_protocol.rb
|
216
|
+
- tests/test_pause.rb
|
217
|
+
- tests/test_pending_connect_timeout.rb
|
218
|
+
- tests/test_pool.rb
|
219
|
+
- tests/test_process_watch.rb
|
220
|
+
- tests/test_processes.rb
|
221
|
+
- tests/test_proxy_connection.rb
|
222
|
+
- tests/test_pure.rb
|
223
|
+
- tests/test_queue.rb
|
224
|
+
- tests/test_resolver.rb
|
225
|
+
- tests/test_running.rb
|
226
|
+
- tests/test_sasl.rb
|
227
|
+
- tests/test_send_file.rb
|
228
|
+
- tests/test_servers.rb
|
229
|
+
- tests/test_set_sock_opt.rb
|
230
|
+
- tests/test_shutdown_hooks.rb
|
231
|
+
- tests/test_smtpclient.rb
|
232
|
+
- tests/test_smtpserver.rb
|
233
|
+
- tests/test_spawn.rb
|
234
|
+
- tests/test_ssl_args.rb
|
235
|
+
- tests/test_ssl_methods.rb
|
236
|
+
- tests/test_ssl_verify.rb
|
237
|
+
- tests/test_threaded_resource.rb
|
238
|
+
- tests/test_tick_loop.rb
|
239
|
+
- tests/test_timers.rb
|
240
|
+
- tests/test_ud.rb
|
241
|
+
- tests/test_unbind_reason.rb
|
242
|
+
- lib/rubyeventmachine.jar
|
234
243
|
homepage: http://rubyeventmachine.com
|
235
244
|
licenses: []
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
245
|
+
post_install_message:
|
246
|
+
rdoc_options:
|
247
|
+
- "--title"
|
248
|
+
- EventMachine
|
249
|
+
- "--main"
|
250
|
+
- README.md
|
251
|
+
- "-x"
|
252
|
+
- lib/em/version
|
253
|
+
- "-x"
|
254
|
+
- lib/jeventmachine
|
255
|
+
require_paths:
|
256
|
+
- lib
|
257
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
258
|
+
requirements:
|
259
|
+
- - ">="
|
260
|
+
- !ruby/object:Gem::Version
|
261
|
+
segments:
|
262
|
+
- 0
|
263
|
+
hash: 2
|
264
|
+
version: !binary |-
|
265
|
+
MA==
|
250
266
|
none: false
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
267
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
268
|
+
requirements:
|
269
|
+
- - ">="
|
270
|
+
- !ruby/object:Gem::Version
|
271
|
+
segments:
|
272
|
+
- 0
|
273
|
+
hash: 2
|
274
|
+
version: !binary |-
|
275
|
+
MA==
|
256
276
|
none: false
|
257
|
-
requirements:
|
258
|
-
- - ">"
|
259
|
-
- !ruby/object:Gem::Version
|
260
|
-
version: 1.3.1
|
261
277
|
requirements: []
|
262
|
-
|
263
278
|
rubyforge_project: eventmachine
|
264
|
-
rubygems_version: 1.8.
|
265
|
-
signing_key:
|
279
|
+
rubygems_version: 1.8.24
|
280
|
+
signing_key:
|
266
281
|
specification_version: 3
|
267
282
|
summary: Ruby/EventMachine library
|
268
283
|
test_files: []
|
269
|
-
|