rev 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (194) hide show
  1. data/README +4 -0
  2. data/ext/rev/rev_buffer.c +21 -8
  3. data/ext/rev/rev_watcher.c +23 -6
  4. data/ext/rev/rev_watcher.h +5 -13
  5. data/lib/rev.rb +1 -1
  6. data/lib/rev/buffered_io.rb +8 -12
  7. data/lib/rev_ext.bundle +0 -0
  8. metadata +2 -226
  9. data/doc/rdoc/classes/Rev.html +0 -368
  10. data/doc/rdoc/classes/Rev.src/M000001.html +0 -28
  11. data/doc/rdoc/classes/Rev.src/M000002.html +0 -35
  12. data/doc/rdoc/classes/Rev.src/M000003.html +0 -24
  13. data/doc/rdoc/classes/Rev.src/M000004.html +0 -28
  14. data/doc/rdoc/classes/Rev.src/M000005.html +0 -27
  15. data/doc/rdoc/classes/Rev.src/M000006.html +0 -33
  16. data/doc/rdoc/classes/Rev.src/M000007.html +0 -43
  17. data/doc/rdoc/classes/Rev.src/M000008.html +0 -16
  18. data/doc/rdoc/classes/Rev/Buffer.html +0 -354
  19. data/doc/rdoc/classes/Rev/Buffer.src/M000019.html +0 -17
  20. data/doc/rdoc/classes/Rev/Buffer.src/M000020.html +0 -29
  21. data/doc/rdoc/classes/Rev/Buffer.src/M000021.html +0 -27
  22. data/doc/rdoc/classes/Rev/Buffer.src/M000022.html +0 -27
  23. data/doc/rdoc/classes/Rev/Buffer.src/M000023.html +0 -31
  24. data/doc/rdoc/classes/Rev/Buffer.src/M000024.html +0 -31
  25. data/doc/rdoc/classes/Rev/Buffer.src/M000025.html +0 -30
  26. data/doc/rdoc/classes/Rev/Buffer.src/M000026.html +0 -50
  27. data/doc/rdoc/classes/Rev/Buffer.src/M000027.html +0 -22
  28. data/doc/rdoc/classes/Rev/Buffer.src/M000028.html +0 -24
  29. data/doc/rdoc/classes/Rev/Buffer.src/M000029.html +0 -24
  30. data/doc/rdoc/classes/Rev/BufferedIO.html +0 -397
  31. data/doc/rdoc/classes/Rev/BufferedIO.src/M000095.html +0 -23
  32. data/doc/rdoc/classes/Rev/BufferedIO.src/M000096.html +0 -16
  33. data/doc/rdoc/classes/Rev/BufferedIO.src/M000097.html +0 -16
  34. data/doc/rdoc/classes/Rev/BufferedIO.src/M000098.html +0 -16
  35. data/doc/rdoc/classes/Rev/BufferedIO.src/M000099.html +0 -18
  36. data/doc/rdoc/classes/Rev/BufferedIO.src/M000100.html +0 -18
  37. data/doc/rdoc/classes/Rev/BufferedIO.src/M000101.html +0 -23
  38. data/doc/rdoc/classes/Rev/BufferedIO.src/M000102.html +0 -18
  39. data/doc/rdoc/classes/Rev/BufferedIO.src/M000103.html +0 -20
  40. data/doc/rdoc/classes/Rev/BufferedIO.src/M000104.html +0 -24
  41. data/doc/rdoc/classes/Rev/BufferedIO.src/M000105.html +0 -23
  42. data/doc/rdoc/classes/Rev/BufferedIO.src/M000106.html +0 -22
  43. data/doc/rdoc/classes/Rev/BufferedIO.src/M000107.html +0 -29
  44. data/doc/rdoc/classes/Rev/BufferedIO/Writer.html +0 -154
  45. data/doc/rdoc/classes/Rev/BufferedIO/Writer.src/M000108.html +0 -19
  46. data/doc/rdoc/classes/Rev/BufferedIO/Writer.src/M000109.html +0 -18
  47. data/doc/rdoc/classes/Rev/DNSResolver.html +0 -401
  48. data/doc/rdoc/classes/Rev/DNSResolver.src/M000124.html +0 -25
  49. data/doc/rdoc/classes/Rev/DNSResolver.src/M000125.html +0 -29
  50. data/doc/rdoc/classes/Rev/DNSResolver.src/M000126.html +0 -20
  51. data/doc/rdoc/classes/Rev/DNSResolver.src/M000127.html +0 -19
  52. data/doc/rdoc/classes/Rev/DNSResolver.src/M000128.html +0 -16
  53. data/doc/rdoc/classes/Rev/DNSResolver.src/M000129.html +0 -16
  54. data/doc/rdoc/classes/Rev/DNSResolver.src/M000131.html +0 -19
  55. data/doc/rdoc/classes/Rev/DNSResolver.src/M000132.html +0 -21
  56. data/doc/rdoc/classes/Rev/DNSResolver.src/M000133.html +0 -27
  57. data/doc/rdoc/classes/Rev/DNSResolver.src/M000134.html +0 -28
  58. data/doc/rdoc/classes/Rev/DNSResolver.src/M000135.html +0 -55
  59. data/doc/rdoc/classes/Rev/DNSResolver/Timeout.html +0 -154
  60. data/doc/rdoc/classes/Rev/DNSResolver/Timeout.src/M000136.html +0 -20
  61. data/doc/rdoc/classes/Rev/DNSResolver/Timeout.src/M000137.html +0 -22
  62. data/doc/rdoc/classes/Rev/HttpChunkHeader.html +0 -156
  63. data/doc/rdoc/classes/Rev/HttpChunkHeader.src/M000031.html +0 -19
  64. data/doc/rdoc/classes/Rev/HttpClient.html +0 -460
  65. data/doc/rdoc/classes/Rev/HttpClient.src/M000042.html +0 -18
  66. data/doc/rdoc/classes/Rev/HttpClient.src/M000043.html +0 -27
  67. data/doc/rdoc/classes/Rev/HttpClient.src/M000044.html +0 -24
  68. data/doc/rdoc/classes/Rev/HttpClient.src/M000045.html +0 -19
  69. data/doc/rdoc/classes/Rev/HttpClient.src/M000046.html +0 -17
  70. data/doc/rdoc/classes/Rev/HttpClient.src/M000047.html +0 -19
  71. data/doc/rdoc/classes/Rev/HttpClient.src/M000048.html +0 -18
  72. data/doc/rdoc/classes/Rev/HttpClient.src/M000049.html +0 -18
  73. data/doc/rdoc/classes/Rev/HttpClient.src/M000050.html +0 -19
  74. data/doc/rdoc/classes/Rev/HttpClient.src/M000051.html +0 -19
  75. data/doc/rdoc/classes/Rev/HttpClient.src/M000052.html +0 -19
  76. data/doc/rdoc/classes/Rev/HttpClient.src/M000053.html +0 -41
  77. data/doc/rdoc/classes/Rev/HttpClient.src/M000054.html +0 -18
  78. data/doc/rdoc/classes/Rev/HttpClient.src/M000055.html +0 -34
  79. data/doc/rdoc/classes/Rev/HttpEncoding.html +0 -310
  80. data/doc/rdoc/classes/Rev/HttpEncoding.src/M000009.html +0 -20
  81. data/doc/rdoc/classes/Rev/HttpEncoding.src/M000010.html +0 -20
  82. data/doc/rdoc/classes/Rev/HttpEncoding.src/M000011.html +0 -18
  83. data/doc/rdoc/classes/Rev/HttpEncoding.src/M000012.html +0 -18
  84. data/doc/rdoc/classes/Rev/HttpEncoding.src/M000013.html +0 -18
  85. data/doc/rdoc/classes/Rev/HttpEncoding.src/M000014.html +0 -19
  86. data/doc/rdoc/classes/Rev/HttpEncoding.src/M000015.html +0 -18
  87. data/doc/rdoc/classes/Rev/HttpEncoding.src/M000016.html +0 -18
  88. data/doc/rdoc/classes/Rev/HttpEncoding.src/M000017.html +0 -22
  89. data/doc/rdoc/classes/Rev/HttpEncoding.src/M000018.html +0 -18
  90. data/doc/rdoc/classes/Rev/HttpResponseHeader.html +0 -219
  91. data/doc/rdoc/classes/Rev/HttpResponseHeader.src/M000032.html +0 -18
  92. data/doc/rdoc/classes/Rev/HttpResponseHeader.src/M000033.html +0 -18
  93. data/doc/rdoc/classes/Rev/HttpResponseHeader.src/M000034.html +0 -18
  94. data/doc/rdoc/classes/Rev/IOWatcher.html +0 -285
  95. data/doc/rdoc/classes/Rev/IOWatcher.src/M000079.html +0 -17
  96. data/doc/rdoc/classes/Rev/IOWatcher.src/M000080.html +0 -27
  97. data/doc/rdoc/classes/Rev/IOWatcher.src/M000081.html +0 -26
  98. data/doc/rdoc/classes/Rev/IOWatcher.src/M000082.html +0 -27
  99. data/doc/rdoc/classes/Rev/IOWatcher.src/M000083.html +0 -27
  100. data/doc/rdoc/classes/Rev/IOWatcher.src/M000084.html +0 -24
  101. data/doc/rdoc/classes/Rev/IOWatcher.src/M000085.html +0 -25
  102. data/doc/rdoc/classes/Rev/Listener.html +0 -207
  103. data/doc/rdoc/classes/Rev/Listener.src/M000065.html +0 -19
  104. data/doc/rdoc/classes/Rev/Listener.src/M000066.html +0 -19
  105. data/doc/rdoc/classes/Rev/Listener.src/M000067.html +0 -16
  106. data/doc/rdoc/classes/Rev/Listener.src/M000068.html +0 -18
  107. data/doc/rdoc/classes/Rev/Loop.html +0 -395
  108. data/doc/rdoc/classes/Rev/Loop.src/M000070.html +0 -25
  109. data/doc/rdoc/classes/Rev/Loop.src/M000071.html +0 -45
  110. data/doc/rdoc/classes/Rev/Loop.src/M000072.html +0 -18
  111. data/doc/rdoc/classes/Rev/Loop.src/M000073.html +0 -23
  112. data/doc/rdoc/classes/Rev/Loop.src/M000074.html +0 -19
  113. data/doc/rdoc/classes/Rev/Loop.src/M000075.html +0 -17
  114. data/doc/rdoc/classes/Rev/Loop.src/M000076.html +0 -27
  115. data/doc/rdoc/classes/Rev/Loop.src/M000077.html +0 -32
  116. data/doc/rdoc/classes/Rev/Loop.src/M000078.html +0 -32
  117. data/doc/rdoc/classes/Rev/Server.html +0 -164
  118. data/doc/rdoc/classes/Rev/Server.src/M000121.html +0 -32
  119. data/doc/rdoc/classes/Rev/Server.src/M000122.html +0 -20
  120. data/doc/rdoc/classes/Rev/Socket.html +0 -213
  121. data/doc/rdoc/classes/Rev/Socket.src/M000035.html +0 -21
  122. data/doc/rdoc/classes/Rev/Socket.src/M000036.html +0 -25
  123. data/doc/rdoc/classes/Rev/Socket.src/M000037.html +0 -16
  124. data/doc/rdoc/classes/Rev/Socket.src/M000038.html +0 -16
  125. data/doc/rdoc/classes/Rev/Socket/Connector.html +0 -154
  126. data/doc/rdoc/classes/Rev/Socket/Connector.src/M000040.html +0 -19
  127. data/doc/rdoc/classes/Rev/Socket/Connector.src/M000041.html +0 -28
  128. data/doc/rdoc/classes/Rev/TCPListener.html +0 -161
  129. data/doc/rdoc/classes/Rev/TCPListener.src/M000069.html +0 -23
  130. data/doc/rdoc/classes/Rev/TCPServer.html +0 -147
  131. data/doc/rdoc/classes/Rev/TCPServer.src/M000123.html +0 -20
  132. data/doc/rdoc/classes/Rev/TCPSocket.html +0 -233
  133. data/doc/rdoc/classes/Rev/TCPSocket.src/M000056.html +0 -20
  134. data/doc/rdoc/classes/Rev/TCPSocket.src/M000057.html +0 -34
  135. data/doc/rdoc/classes/Rev/TCPSocket.src/M000058.html +0 -24
  136. data/doc/rdoc/classes/Rev/TCPSocket.src/M000059.html +0 -18
  137. data/doc/rdoc/classes/Rev/TCPSocket/TCPConnectResolver.html +0 -171
  138. data/doc/rdoc/classes/Rev/TCPSocket/TCPConnectResolver.src/M000060.html +0 -19
  139. data/doc/rdoc/classes/Rev/TCPSocket/TCPConnectResolver.src/M000061.html +0 -27
  140. data/doc/rdoc/classes/Rev/TCPSocket/TCPConnectResolver.src/M000062.html +0 -23
  141. data/doc/rdoc/classes/Rev/TCPSocket/TCPConnectSocket.html +0 -154
  142. data/doc/rdoc/classes/Rev/TCPSocket/TCPConnectSocket.src/M000063.html +0 -25
  143. data/doc/rdoc/classes/Rev/TCPSocket/TCPConnectSocket.src/M000064.html +0 -23
  144. data/doc/rdoc/classes/Rev/TimerWatcher.html +0 -288
  145. data/doc/rdoc/classes/Rev/TimerWatcher.src/M000086.html +0 -17
  146. data/doc/rdoc/classes/Rev/TimerWatcher.src/M000087.html +0 -27
  147. data/doc/rdoc/classes/Rev/TimerWatcher.src/M000088.html +0 -26
  148. data/doc/rdoc/classes/Rev/TimerWatcher.src/M000089.html +0 -27
  149. data/doc/rdoc/classes/Rev/TimerWatcher.src/M000090.html +0 -27
  150. data/doc/rdoc/classes/Rev/TimerWatcher.src/M000091.html +0 -42
  151. data/doc/rdoc/classes/Rev/TimerWatcher.src/M000092.html +0 -24
  152. data/doc/rdoc/classes/Rev/UNIXListener.html +0 -147
  153. data/doc/rdoc/classes/Rev/UNIXListener.src/M000120.html +0 -18
  154. data/doc/rdoc/classes/Rev/UNIXServer.html +0 -147
  155. data/doc/rdoc/classes/Rev/UNIXServer.src/M000030.html +0 -18
  156. data/doc/rdoc/classes/Rev/UNIXSocket.html +0 -175
  157. data/doc/rdoc/classes/Rev/UNIXSocket.src/M000093.html +0 -18
  158. data/doc/rdoc/classes/Rev/UNIXSocket.src/M000094.html +0 -21
  159. data/doc/rdoc/classes/Rev/Watcher.html +0 -349
  160. data/doc/rdoc/classes/Rev/Watcher.src/M000110.html +0 -20
  161. data/doc/rdoc/classes/Rev/Watcher.src/M000111.html +0 -20
  162. data/doc/rdoc/classes/Rev/Watcher.src/M000112.html +0 -17
  163. data/doc/rdoc/classes/Rev/Watcher.src/M000113.html +0 -48
  164. data/doc/rdoc/classes/Rev/Watcher.src/M000114.html +0 -62
  165. data/doc/rdoc/classes/Rev/Watcher.src/M000115.html +0 -34
  166. data/doc/rdoc/classes/Rev/Watcher.src/M000116.html +0 -34
  167. data/doc/rdoc/classes/Rev/Watcher.src/M000117.html +0 -27
  168. data/doc/rdoc/classes/Rev/Watcher.src/M000118.html +0 -24
  169. data/doc/rdoc/classes/Rev/Watcher.src/M000119.html +0 -27
  170. data/doc/rdoc/created.rid +0 -1
  171. data/doc/rdoc/files/LICENSE.html +0 -165
  172. data/doc/rdoc/files/README.html +0 -297
  173. data/doc/rdoc/files/ext/rev/rev_buffer_c.html +0 -101
  174. data/doc/rdoc/files/ext/rev/rev_ext_c.html +0 -101
  175. data/doc/rdoc/files/ext/rev/rev_io_watcher_c.html +0 -101
  176. data/doc/rdoc/files/ext/rev/rev_loop_c.html +0 -101
  177. data/doc/rdoc/files/ext/rev/rev_timer_watcher_c.html +0 -101
  178. data/doc/rdoc/files/ext/rev/rev_watcher_c.html +0 -101
  179. data/doc/rdoc/files/lib/rev/buffered_io_rb.html +0 -101
  180. data/doc/rdoc/files/lib/rev/dns_resolver_rb.html +0 -101
  181. data/doc/rdoc/files/lib/rev/http_client_rb.html +0 -101
  182. data/doc/rdoc/files/lib/rev/io_watcher_rb.html +0 -101
  183. data/doc/rdoc/files/lib/rev/listener_rb.html +0 -108
  184. data/doc/rdoc/files/lib/rev/loop_rb.html +0 -101
  185. data/doc/rdoc/files/lib/rev/server_rb.html +0 -101
  186. data/doc/rdoc/files/lib/rev/socket_rb.html +0 -109
  187. data/doc/rdoc/files/lib/rev/timer_watcher_rb.html +0 -101
  188. data/doc/rdoc/files/lib/rev/watcher_rb.html +0 -101
  189. data/doc/rdoc/files/lib/rev_rb.html +0 -101
  190. data/doc/rdoc/fr_class_index.html +0 -52
  191. data/doc/rdoc/fr_file_index.html +0 -45
  192. data/doc/rdoc/fr_method_index.html +0 -163
  193. data/doc/rdoc/index.html +0 -24
  194. data/doc/rdoc/rdoc-style.css +0 -208
data/README CHANGED
@@ -9,6 +9,10 @@ Rev also binds asynchronous wrappers to Ruby's core socket classes so you can
9
9
  use them in conjunction with Rev to build asynchronous event-driven
10
10
  applications.
11
11
 
12
+ You can include Rev in your programs with:
13
+
14
+ require 'rev'
15
+
12
16
  == Anatomy
13
17
 
14
18
  Rev builds on two core classes which bind to the libev API:
@@ -17,18 +17,23 @@
17
17
  #define DEFAULT_NODE_SIZE 65536
18
18
 
19
19
  /* Maximum age of a buffer node in a memory pool, in seconds */
20
- #define MAX_AGE 900
20
+ #define MAX_AGE 60
21
+
22
+ /* How often to scan the pool for for old nodes */
23
+ #define PURGE_INTERVAL 10
21
24
 
22
25
  struct buffer {
26
+ time_t last_purged_at;
23
27
  unsigned size, node_size;
24
28
  struct buffer_node *head, *tail;
25
29
  struct buffer_node *pool_head, *pool_tail;
30
+
26
31
  };
27
32
 
28
33
  struct buffer_node {
34
+ time_t last_used_at;
29
35
  unsigned start, end;
30
36
  struct buffer_node *next;
31
- time_t last_used_at;
32
37
  unsigned char data[0];
33
38
  };
34
39
 
@@ -319,11 +324,13 @@ static VALUE Rev_Buffer_write_to(VALUE self, VALUE io) {
319
324
  static struct buffer *buffer_new(void)
320
325
  {
321
326
  struct buffer *buf;
327
+
322
328
  buf = (struct buffer *)xmalloc(sizeof(struct buffer));
323
329
  buf->head = buf->tail = buf->pool_head = buf->pool_tail = 0;
324
330
  buf->size = 0;
325
331
  buf->node_size = DEFAULT_NODE_SIZE;
326
-
332
+ time(&buf->last_purged_at);
333
+
327
334
  return buf;
328
335
  }
329
336
 
@@ -365,6 +372,12 @@ static void buffer_gc(struct buffer *buf)
365
372
  time_t now;
366
373
  time(&now);
367
374
 
375
+ /* Only purge if we've passed the purge interval */
376
+ if(now - buf->last_purged_at < PURGE_INTERVAL)
377
+ return;
378
+
379
+ buf->last_purged_at = now;
380
+
368
381
  while(buf->pool_head && now - buf->pool_head->last_used_at >= MAX_AGE) {
369
382
  tmp = buf->pool_head;
370
383
  buf->pool_head = buf->pool_head->next;
@@ -541,9 +554,9 @@ static int buffer_write_to(struct buffer *buf, int fd)
541
554
  bytes_written = write(fd, buf->head->data + buf->head->start, buf->head->end - buf->head->start);
542
555
 
543
556
  /* If the write failed... */
544
- if(bytes_written < 1) {
545
- if(errno == EAGAIN)
546
- errno = 0;
557
+ if(bytes_written < 0) {
558
+ if(errno != EAGAIN)
559
+ rb_sys_fail("write");
547
560
 
548
561
  return total_bytes_written;
549
562
  }
@@ -586,8 +599,8 @@ static int buffer_read_from(struct buffer *buf, int fd)
586
599
  bytes_read = read(fd, buf->tail->data + buf->tail->end, nbytes);
587
600
 
588
601
  if(bytes_read < 1) {
589
- if(errno == EAGAIN)
590
- errno = 0;
602
+ if(errno != EAGAIN)
603
+ rb_sys_fail("read");
591
604
 
592
605
  return total_bytes_read;
593
606
  }
@@ -94,6 +94,10 @@ static VALUE Rev_Watcher_initialize(VALUE self)
94
94
  static VALUE Rev_Watcher_attach(VALUE self, VALUE loop)
95
95
  {
96
96
  VALUE loop_watchers, active_watchers;
97
+ struct Rev_Watcher *watcher_data;
98
+
99
+ Data_Get_Struct(self, struct Rev_Watcher, watcher_data);
100
+ watcher_data->enabled = 1;
97
101
 
98
102
  loop_watchers = rb_iv_get(loop, "@watchers");
99
103
 
@@ -130,7 +134,6 @@ static VALUE Rev_Watcher_detach(VALUE self)
130
134
  struct Rev_Watcher *watcher_data;
131
135
  struct Rev_Loop *loop_data;
132
136
  VALUE loop_watchers;
133
-
134
137
  int i;
135
138
 
136
139
  Data_Get_Struct(self, struct Rev_Watcher, watcher_data);
@@ -145,11 +148,15 @@ static VALUE Rev_Watcher_detach(VALUE self)
145
148
  * isn't an O(1) operation. Hopefully there's a better way... */
146
149
  rb_ary_delete(loop_watchers, self);
147
150
 
148
- rb_iv_set(
149
- watcher_data->loop,
150
- "@active_watchers",
151
- INT2NUM(NUM2INT(rb_iv_get(watcher_data->loop, "@active_watchers")) - 1)
152
- );
151
+ if(watcher_data->enabled) {
152
+ rb_iv_set(
153
+ watcher_data->loop,
154
+ "@active_watchers",
155
+ INT2NUM(NUM2INT(rb_iv_get(watcher_data->loop, "@active_watchers")) - 1)
156
+ );
157
+ }
158
+
159
+ watcher_data->enabled = 0;
153
160
 
154
161
  Data_Get_Struct(watcher_data->loop, struct Rev_Loop, loop_data);
155
162
 
@@ -180,6 +187,11 @@ static VALUE Rev_Watcher_enable(VALUE self)
180
187
  struct Rev_Watcher *watcher_data;
181
188
  Data_Get_Struct(self, struct Rev_Watcher, watcher_data);
182
189
 
190
+ if(watcher_data->enabled)
191
+ rb_raise(rb_eRuntimeError, "already enabled");
192
+
193
+ watcher_data->enabled = 1;
194
+
183
195
  rb_iv_set(
184
196
  watcher_data->loop,
185
197
  "@active_watchers",
@@ -201,6 +213,11 @@ static VALUE Rev_Watcher_disable(VALUE self)
201
213
  struct Rev_Watcher *watcher_data;
202
214
  Data_Get_Struct(self, struct Rev_Watcher, watcher_data);
203
215
 
216
+ if(!watcher_data->enabled)
217
+ rb_raise(rb_eRuntimeError, "already disabled");
218
+
219
+ watcher_data->enabled = 0;
220
+
204
221
  rb_iv_set(
205
222
  watcher_data->loop,
206
223
  "@active_watchers",
@@ -22,7 +22,6 @@
22
22
  \
23
23
  watcher_data->loop = loop; \
24
24
  ev_##watcher_type##_start(loop_data->ev_loop, &watcher_data->event_types.ev_##watcher_type); \
25
- watcher_data->enabled = 1; \
26
25
  rb_call_super(1, &loop)
27
26
 
28
27
  #define Watcher_Detach(watcher_type, watcher) \
@@ -37,7 +36,6 @@
37
36
  Data_Get_Struct(watcher_data->loop, struct Rev_Loop, loop_data); \
38
37
  \
39
38
  ev_##watcher_type##_stop(loop_data->ev_loop, &watcher_data->event_types.ev_##watcher_type); \
40
- watcher_data->enabled = 0; \
41
39
  rb_call_super(0, 0)
42
40
 
43
41
  #define Watcher_Enable(watcher_type, watcher) \
@@ -46,17 +44,14 @@
46
44
  \
47
45
  Data_Get_Struct(watcher, struct Rev_Watcher, watcher_data); \
48
46
  \
49
- if(watcher_data->enabled) \
50
- rb_raise(rb_eRuntimeError, "already enabled"); \
51
- \
52
47
  if(watcher_data->loop == Qnil) \
53
48
  rb_raise(rb_eRuntimeError, "not attached to a loop"); \
54
49
  \
50
+ rb_call_super(0, 0); \
51
+ \
55
52
  Data_Get_Struct(watcher_data->loop, struct Rev_Loop, loop_data); \
56
53
  \
57
- ev_##watcher_type##_start(loop_data->ev_loop, &watcher_data->event_types.ev_##watcher_type); \
58
- watcher_data->enabled = 1; \
59
- rb_call_super(0, 0)
54
+ ev_##watcher_type##_start(loop_data->ev_loop, &watcher_data->event_types.ev_##watcher_type)
60
55
 
61
56
  #define Watcher_Disable(watcher_type, watcher) \
62
57
  struct Rev_Watcher *watcher_data; \
@@ -67,13 +62,10 @@
67
62
  if(watcher_data->loop == Qnil) \
68
63
  rb_raise(rb_eRuntimeError, "not attached to a loop"); \
69
64
  \
70
- if(!watcher_data->enabled) \
71
- rb_raise(rb_eRuntimeError, "already disabled"); \
65
+ rb_call_super(0, 0); \
72
66
  \
73
67
  Data_Get_Struct(watcher_data->loop, struct Rev_Loop, loop_data); \
74
68
  \
75
- ev_##watcher_type##_stop(loop_data->ev_loop, &watcher_data->event_types.ev_##watcher_type); \
76
- watcher_data->enabled = 0; \
77
- rb_call_super(0, 0)
69
+ ev_##watcher_type##_stop(loop_data->ev_loop, &watcher_data->event_types.ev_##watcher_type)
78
70
 
79
71
  #endif
data/lib/rev.rb CHANGED
@@ -17,6 +17,6 @@ require File.dirname(__FILE__) + '/rev/server'
17
17
  require File.dirname(__FILE__) + '/rev/http_client'
18
18
 
19
19
  module Rev
20
- Rev::VERSION = '0.1.2' unless defined? Rev::VERSION
20
+ Rev::VERSION = '0.1.3' unless defined? Rev::VERSION
21
21
  def self.version() VERSION end
22
22
  end
@@ -88,22 +88,17 @@ module Rev
88
88
  def write_output_buffer
89
89
  return if @write_buffer.empty?
90
90
 
91
- @write_buffer.write_to(@io)
91
+ begin
92
+ @write_buffer.write_to(@io)
93
+ rescue Errno::EPIPE
94
+ return close
95
+ end
96
+
92
97
  return unless @write_buffer.empty?
93
98
 
94
99
  @writer.disable if @writer and @writer.enabled?
95
100
  on_write_complete
96
101
  end
97
-
98
- # Wrapper for handling reset connections and EAGAIN
99
- def write_nonblock(data)
100
- begin
101
- @io.write_nonblock(data)
102
- rescue Errno::ECONNRESET, Errno::EPIPE
103
- close
104
- rescue Errno::EAGAIN
105
- end
106
- end
107
102
 
108
103
  # Inherited callback from IOWatcher
109
104
  def on_readable
@@ -113,7 +108,8 @@ module Rev
113
108
  close
114
109
  end
115
110
  end
116
-
111
+
112
+ # Schedule a write to be performed when the IO object becomes writable
117
113
  def schedule_write
118
114
  return if @writer and @writer.enabled?
119
115
  if @writer
Binary file
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: rev
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.2
7
- date: 2008-01-15 00:00:00 -07:00
6
+ version: 0.1.3
7
+ date: 2008-01-18 00:00:00 -07:00
8
8
  summary: Ruby 1.9 binding to the libev high performance event library
9
9
  require_paths:
10
10
  - lib
@@ -45,230 +45,6 @@ files:
45
45
  - lib/rev/watcher.rb
46
46
  - lib/rev.rb
47
47
  - lib/rev_ext.bundle
48
- - doc/rdoc
49
- - doc/rdoc/classes
50
- - doc/rdoc/classes/Rev
51
- - doc/rdoc/classes/Rev/Buffer.html
52
- - doc/rdoc/classes/Rev/Buffer.src
53
- - doc/rdoc/classes/Rev/Buffer.src/M000019.html
54
- - doc/rdoc/classes/Rev/Buffer.src/M000020.html
55
- - doc/rdoc/classes/Rev/Buffer.src/M000021.html
56
- - doc/rdoc/classes/Rev/Buffer.src/M000022.html
57
- - doc/rdoc/classes/Rev/Buffer.src/M000023.html
58
- - doc/rdoc/classes/Rev/Buffer.src/M000024.html
59
- - doc/rdoc/classes/Rev/Buffer.src/M000025.html
60
- - doc/rdoc/classes/Rev/Buffer.src/M000026.html
61
- - doc/rdoc/classes/Rev/Buffer.src/M000027.html
62
- - doc/rdoc/classes/Rev/Buffer.src/M000028.html
63
- - doc/rdoc/classes/Rev/Buffer.src/M000029.html
64
- - doc/rdoc/classes/Rev/BufferedIO
65
- - doc/rdoc/classes/Rev/BufferedIO/Writer.html
66
- - doc/rdoc/classes/Rev/BufferedIO/Writer.src
67
- - doc/rdoc/classes/Rev/BufferedIO/Writer.src/M000108.html
68
- - doc/rdoc/classes/Rev/BufferedIO/Writer.src/M000109.html
69
- - doc/rdoc/classes/Rev/BufferedIO.html
70
- - doc/rdoc/classes/Rev/BufferedIO.src
71
- - doc/rdoc/classes/Rev/BufferedIO.src/M000095.html
72
- - doc/rdoc/classes/Rev/BufferedIO.src/M000096.html
73
- - doc/rdoc/classes/Rev/BufferedIO.src/M000097.html
74
- - doc/rdoc/classes/Rev/BufferedIO.src/M000098.html
75
- - doc/rdoc/classes/Rev/BufferedIO.src/M000099.html
76
- - doc/rdoc/classes/Rev/BufferedIO.src/M000100.html
77
- - doc/rdoc/classes/Rev/BufferedIO.src/M000101.html
78
- - doc/rdoc/classes/Rev/BufferedIO.src/M000102.html
79
- - doc/rdoc/classes/Rev/BufferedIO.src/M000103.html
80
- - doc/rdoc/classes/Rev/BufferedIO.src/M000104.html
81
- - doc/rdoc/classes/Rev/BufferedIO.src/M000105.html
82
- - doc/rdoc/classes/Rev/BufferedIO.src/M000106.html
83
- - doc/rdoc/classes/Rev/BufferedIO.src/M000107.html
84
- - doc/rdoc/classes/Rev/DNSResolver
85
- - doc/rdoc/classes/Rev/DNSResolver/Timeout.html
86
- - doc/rdoc/classes/Rev/DNSResolver/Timeout.src
87
- - doc/rdoc/classes/Rev/DNSResolver/Timeout.src/M000136.html
88
- - doc/rdoc/classes/Rev/DNSResolver/Timeout.src/M000137.html
89
- - doc/rdoc/classes/Rev/DNSResolver.html
90
- - doc/rdoc/classes/Rev/DNSResolver.src
91
- - doc/rdoc/classes/Rev/DNSResolver.src/M000124.html
92
- - doc/rdoc/classes/Rev/DNSResolver.src/M000125.html
93
- - doc/rdoc/classes/Rev/DNSResolver.src/M000126.html
94
- - doc/rdoc/classes/Rev/DNSResolver.src/M000127.html
95
- - doc/rdoc/classes/Rev/DNSResolver.src/M000128.html
96
- - doc/rdoc/classes/Rev/DNSResolver.src/M000129.html
97
- - doc/rdoc/classes/Rev/DNSResolver.src/M000131.html
98
- - doc/rdoc/classes/Rev/DNSResolver.src/M000132.html
99
- - doc/rdoc/classes/Rev/DNSResolver.src/M000133.html
100
- - doc/rdoc/classes/Rev/DNSResolver.src/M000134.html
101
- - doc/rdoc/classes/Rev/DNSResolver.src/M000135.html
102
- - doc/rdoc/classes/Rev/HttpChunkHeader.html
103
- - doc/rdoc/classes/Rev/HttpChunkHeader.src
104
- - doc/rdoc/classes/Rev/HttpChunkHeader.src/M000031.html
105
- - doc/rdoc/classes/Rev/HttpClient.html
106
- - doc/rdoc/classes/Rev/HttpClient.src
107
- - doc/rdoc/classes/Rev/HttpClient.src/M000042.html
108
- - doc/rdoc/classes/Rev/HttpClient.src/M000043.html
109
- - doc/rdoc/classes/Rev/HttpClient.src/M000044.html
110
- - doc/rdoc/classes/Rev/HttpClient.src/M000045.html
111
- - doc/rdoc/classes/Rev/HttpClient.src/M000046.html
112
- - doc/rdoc/classes/Rev/HttpClient.src/M000047.html
113
- - doc/rdoc/classes/Rev/HttpClient.src/M000048.html
114
- - doc/rdoc/classes/Rev/HttpClient.src/M000049.html
115
- - doc/rdoc/classes/Rev/HttpClient.src/M000050.html
116
- - doc/rdoc/classes/Rev/HttpClient.src/M000051.html
117
- - doc/rdoc/classes/Rev/HttpClient.src/M000052.html
118
- - doc/rdoc/classes/Rev/HttpClient.src/M000053.html
119
- - doc/rdoc/classes/Rev/HttpClient.src/M000054.html
120
- - doc/rdoc/classes/Rev/HttpClient.src/M000055.html
121
- - doc/rdoc/classes/Rev/HttpEncoding.html
122
- - doc/rdoc/classes/Rev/HttpEncoding.src
123
- - doc/rdoc/classes/Rev/HttpEncoding.src/M000009.html
124
- - doc/rdoc/classes/Rev/HttpEncoding.src/M000010.html
125
- - doc/rdoc/classes/Rev/HttpEncoding.src/M000011.html
126
- - doc/rdoc/classes/Rev/HttpEncoding.src/M000012.html
127
- - doc/rdoc/classes/Rev/HttpEncoding.src/M000013.html
128
- - doc/rdoc/classes/Rev/HttpEncoding.src/M000014.html
129
- - doc/rdoc/classes/Rev/HttpEncoding.src/M000015.html
130
- - doc/rdoc/classes/Rev/HttpEncoding.src/M000016.html
131
- - doc/rdoc/classes/Rev/HttpEncoding.src/M000017.html
132
- - doc/rdoc/classes/Rev/HttpEncoding.src/M000018.html
133
- - doc/rdoc/classes/Rev/HttpResponseHeader.html
134
- - doc/rdoc/classes/Rev/HttpResponseHeader.src
135
- - doc/rdoc/classes/Rev/HttpResponseHeader.src/M000032.html
136
- - doc/rdoc/classes/Rev/HttpResponseHeader.src/M000033.html
137
- - doc/rdoc/classes/Rev/HttpResponseHeader.src/M000034.html
138
- - doc/rdoc/classes/Rev/IOWatcher.html
139
- - doc/rdoc/classes/Rev/IOWatcher.src
140
- - doc/rdoc/classes/Rev/IOWatcher.src/M000079.html
141
- - doc/rdoc/classes/Rev/IOWatcher.src/M000080.html
142
- - doc/rdoc/classes/Rev/IOWatcher.src/M000081.html
143
- - doc/rdoc/classes/Rev/IOWatcher.src/M000082.html
144
- - doc/rdoc/classes/Rev/IOWatcher.src/M000083.html
145
- - doc/rdoc/classes/Rev/IOWatcher.src/M000084.html
146
- - doc/rdoc/classes/Rev/IOWatcher.src/M000085.html
147
- - doc/rdoc/classes/Rev/Listener.html
148
- - doc/rdoc/classes/Rev/Listener.src
149
- - doc/rdoc/classes/Rev/Listener.src/M000065.html
150
- - doc/rdoc/classes/Rev/Listener.src/M000066.html
151
- - doc/rdoc/classes/Rev/Listener.src/M000067.html
152
- - doc/rdoc/classes/Rev/Listener.src/M000068.html
153
- - doc/rdoc/classes/Rev/Loop.html
154
- - doc/rdoc/classes/Rev/Loop.src
155
- - doc/rdoc/classes/Rev/Loop.src/M000070.html
156
- - doc/rdoc/classes/Rev/Loop.src/M000071.html
157
- - doc/rdoc/classes/Rev/Loop.src/M000072.html
158
- - doc/rdoc/classes/Rev/Loop.src/M000073.html
159
- - doc/rdoc/classes/Rev/Loop.src/M000074.html
160
- - doc/rdoc/classes/Rev/Loop.src/M000075.html
161
- - doc/rdoc/classes/Rev/Loop.src/M000076.html
162
- - doc/rdoc/classes/Rev/Loop.src/M000077.html
163
- - doc/rdoc/classes/Rev/Loop.src/M000078.html
164
- - doc/rdoc/classes/Rev/Server.html
165
- - doc/rdoc/classes/Rev/Server.src
166
- - doc/rdoc/classes/Rev/Server.src/M000121.html
167
- - doc/rdoc/classes/Rev/Server.src/M000122.html
168
- - doc/rdoc/classes/Rev/Socket
169
- - doc/rdoc/classes/Rev/Socket/Connector.html
170
- - doc/rdoc/classes/Rev/Socket/Connector.src
171
- - doc/rdoc/classes/Rev/Socket/Connector.src/M000040.html
172
- - doc/rdoc/classes/Rev/Socket/Connector.src/M000041.html
173
- - doc/rdoc/classes/Rev/Socket.html
174
- - doc/rdoc/classes/Rev/Socket.src
175
- - doc/rdoc/classes/Rev/Socket.src/M000035.html
176
- - doc/rdoc/classes/Rev/Socket.src/M000036.html
177
- - doc/rdoc/classes/Rev/Socket.src/M000037.html
178
- - doc/rdoc/classes/Rev/Socket.src/M000038.html
179
- - doc/rdoc/classes/Rev/TCPListener.html
180
- - doc/rdoc/classes/Rev/TCPListener.src
181
- - doc/rdoc/classes/Rev/TCPListener.src/M000069.html
182
- - doc/rdoc/classes/Rev/TCPServer.html
183
- - doc/rdoc/classes/Rev/TCPServer.src
184
- - doc/rdoc/classes/Rev/TCPServer.src/M000123.html
185
- - doc/rdoc/classes/Rev/TCPSocket
186
- - doc/rdoc/classes/Rev/TCPSocket/TCPConnectResolver.html
187
- - doc/rdoc/classes/Rev/TCPSocket/TCPConnectResolver.src
188
- - doc/rdoc/classes/Rev/TCPSocket/TCPConnectResolver.src/M000060.html
189
- - doc/rdoc/classes/Rev/TCPSocket/TCPConnectResolver.src/M000061.html
190
- - doc/rdoc/classes/Rev/TCPSocket/TCPConnectResolver.src/M000062.html
191
- - doc/rdoc/classes/Rev/TCPSocket/TCPConnectSocket.html
192
- - doc/rdoc/classes/Rev/TCPSocket/TCPConnectSocket.src
193
- - doc/rdoc/classes/Rev/TCPSocket/TCPConnectSocket.src/M000063.html
194
- - doc/rdoc/classes/Rev/TCPSocket/TCPConnectSocket.src/M000064.html
195
- - doc/rdoc/classes/Rev/TCPSocket.html
196
- - doc/rdoc/classes/Rev/TCPSocket.src
197
- - doc/rdoc/classes/Rev/TCPSocket.src/M000056.html
198
- - doc/rdoc/classes/Rev/TCPSocket.src/M000057.html
199
- - doc/rdoc/classes/Rev/TCPSocket.src/M000058.html
200
- - doc/rdoc/classes/Rev/TCPSocket.src/M000059.html
201
- - doc/rdoc/classes/Rev/TimerWatcher.html
202
- - doc/rdoc/classes/Rev/TimerWatcher.src
203
- - doc/rdoc/classes/Rev/TimerWatcher.src/M000086.html
204
- - doc/rdoc/classes/Rev/TimerWatcher.src/M000087.html
205
- - doc/rdoc/classes/Rev/TimerWatcher.src/M000088.html
206
- - doc/rdoc/classes/Rev/TimerWatcher.src/M000089.html
207
- - doc/rdoc/classes/Rev/TimerWatcher.src/M000090.html
208
- - doc/rdoc/classes/Rev/TimerWatcher.src/M000091.html
209
- - doc/rdoc/classes/Rev/TimerWatcher.src/M000092.html
210
- - doc/rdoc/classes/Rev/UNIXListener.html
211
- - doc/rdoc/classes/Rev/UNIXListener.src
212
- - doc/rdoc/classes/Rev/UNIXListener.src/M000120.html
213
- - doc/rdoc/classes/Rev/UNIXServer.html
214
- - doc/rdoc/classes/Rev/UNIXServer.src
215
- - doc/rdoc/classes/Rev/UNIXServer.src/M000030.html
216
- - doc/rdoc/classes/Rev/UNIXSocket.html
217
- - doc/rdoc/classes/Rev/UNIXSocket.src
218
- - doc/rdoc/classes/Rev/UNIXSocket.src/M000093.html
219
- - doc/rdoc/classes/Rev/UNIXSocket.src/M000094.html
220
- - doc/rdoc/classes/Rev/Watcher.html
221
- - doc/rdoc/classes/Rev/Watcher.src
222
- - doc/rdoc/classes/Rev/Watcher.src/M000110.html
223
- - doc/rdoc/classes/Rev/Watcher.src/M000111.html
224
- - doc/rdoc/classes/Rev/Watcher.src/M000112.html
225
- - doc/rdoc/classes/Rev/Watcher.src/M000113.html
226
- - doc/rdoc/classes/Rev/Watcher.src/M000114.html
227
- - doc/rdoc/classes/Rev/Watcher.src/M000115.html
228
- - doc/rdoc/classes/Rev/Watcher.src/M000116.html
229
- - doc/rdoc/classes/Rev/Watcher.src/M000117.html
230
- - doc/rdoc/classes/Rev/Watcher.src/M000118.html
231
- - doc/rdoc/classes/Rev/Watcher.src/M000119.html
232
- - doc/rdoc/classes/Rev.html
233
- - doc/rdoc/classes/Rev.src
234
- - doc/rdoc/classes/Rev.src/M000001.html
235
- - doc/rdoc/classes/Rev.src/M000002.html
236
- - doc/rdoc/classes/Rev.src/M000003.html
237
- - doc/rdoc/classes/Rev.src/M000004.html
238
- - doc/rdoc/classes/Rev.src/M000005.html
239
- - doc/rdoc/classes/Rev.src/M000006.html
240
- - doc/rdoc/classes/Rev.src/M000007.html
241
- - doc/rdoc/classes/Rev.src/M000008.html
242
- - doc/rdoc/created.rid
243
- - doc/rdoc/files
244
- - doc/rdoc/files/ext
245
- - doc/rdoc/files/ext/rev
246
- - doc/rdoc/files/ext/rev/rev_buffer_c.html
247
- - doc/rdoc/files/ext/rev/rev_ext_c.html
248
- - doc/rdoc/files/ext/rev/rev_io_watcher_c.html
249
- - doc/rdoc/files/ext/rev/rev_loop_c.html
250
- - doc/rdoc/files/ext/rev/rev_timer_watcher_c.html
251
- - doc/rdoc/files/ext/rev/rev_watcher_c.html
252
- - doc/rdoc/files/lib
253
- - doc/rdoc/files/lib/rev
254
- - doc/rdoc/files/lib/rev/buffered_io_rb.html
255
- - doc/rdoc/files/lib/rev/dns_resolver_rb.html
256
- - doc/rdoc/files/lib/rev/http_client_rb.html
257
- - doc/rdoc/files/lib/rev/io_watcher_rb.html
258
- - doc/rdoc/files/lib/rev/listener_rb.html
259
- - doc/rdoc/files/lib/rev/loop_rb.html
260
- - doc/rdoc/files/lib/rev/server_rb.html
261
- - doc/rdoc/files/lib/rev/socket_rb.html
262
- - doc/rdoc/files/lib/rev/timer_watcher_rb.html
263
- - doc/rdoc/files/lib/rev/watcher_rb.html
264
- - doc/rdoc/files/lib/rev_rb.html
265
- - doc/rdoc/files/LICENSE.html
266
- - doc/rdoc/files/README.html
267
- - doc/rdoc/fr_class_index.html
268
- - doc/rdoc/fr_file_index.html
269
- - doc/rdoc/fr_method_index.html
270
- - doc/rdoc/index.html
271
- - doc/rdoc/rdoc-style.css
272
48
  - ext/http11_client/ext_help.h
273
49
  - ext/http11_client/http11_parser.h
274
50
  - ext/libev/ev.h