rev 0.1.2 → 0.1.3

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.
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