cool.io 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. data/.gitignore +25 -0
  2. data/CHANGES +199 -0
  3. data/LICENSE +20 -0
  4. data/README.markdown +4 -0
  5. data/Rakefile +98 -0
  6. data/VERSION +1 -0
  7. data/examples/echo_client.rb +38 -0
  8. data/examples/echo_server.rb +27 -0
  9. data/examples/google.rb +9 -0
  10. data/examples/httpclient.rb +38 -0
  11. data/ext/cool.io/.gitignore +5 -0
  12. data/ext/cool.io/cool.io.h +58 -0
  13. data/ext/cool.io/cool.io_ext.c +25 -0
  14. data/ext/cool.io/ev_wrap.h +8 -0
  15. data/ext/cool.io/extconf.rb +69 -0
  16. data/ext/cool.io/iowatcher.c +189 -0
  17. data/ext/cool.io/libev.c +8 -0
  18. data/ext/cool.io/loop.c +303 -0
  19. data/ext/cool.io/stat_watcher.c +191 -0
  20. data/ext/cool.io/timer_watcher.c +219 -0
  21. data/ext/cool.io/utils.c +122 -0
  22. data/ext/cool.io/watcher.c +264 -0
  23. data/ext/cool.io/watcher.h +71 -0
  24. data/ext/http11_client/.gitignore +5 -0
  25. data/ext/http11_client/ext_help.h +14 -0
  26. data/ext/http11_client/extconf.rb +6 -0
  27. data/ext/http11_client/http11_client.c +300 -0
  28. data/ext/http11_client/http11_parser.c +403 -0
  29. data/ext/http11_client/http11_parser.h +48 -0
  30. data/ext/http11_client/http11_parser.rl +173 -0
  31. data/ext/libev/Changes +364 -0
  32. data/ext/libev/LICENSE +36 -0
  33. data/ext/libev/README +58 -0
  34. data/ext/libev/README.embed +3 -0
  35. data/ext/libev/ev.c +3867 -0
  36. data/ext/libev/ev.h +826 -0
  37. data/ext/libev/ev_epoll.c +234 -0
  38. data/ext/libev/ev_kqueue.c +198 -0
  39. data/ext/libev/ev_poll.c +148 -0
  40. data/ext/libev/ev_port.c +164 -0
  41. data/ext/libev/ev_select.c +307 -0
  42. data/ext/libev/ev_vars.h +197 -0
  43. data/ext/libev/ev_win32.c +153 -0
  44. data/ext/libev/ev_wrap.h +186 -0
  45. data/ext/libev/test_libev_win32.c +123 -0
  46. data/ext/libev/update_ev_wrap +19 -0
  47. data/lib/.gitignore +2 -0
  48. data/lib/cool.io.rb +30 -0
  49. data/lib/cool.io/async_watcher.rb +43 -0
  50. data/lib/cool.io/dns_resolver.rb +220 -0
  51. data/lib/cool.io/eventmachine.rb +234 -0
  52. data/lib/cool.io/http_client.rb +419 -0
  53. data/lib/cool.io/io.rb +174 -0
  54. data/lib/cool.io/iowatcher.rb +17 -0
  55. data/lib/cool.io/listener.rb +93 -0
  56. data/lib/cool.io/loop.rb +130 -0
  57. data/lib/cool.io/meta.rb +49 -0
  58. data/lib/cool.io/server.rb +74 -0
  59. data/lib/cool.io/socket.rb +224 -0
  60. data/lib/cool.io/timer_watcher.rb +17 -0
  61. data/lib/coolio.rb +2 -0
  62. data/lib/rev.rb +4 -0
  63. data/spec/async_watcher_spec.rb +57 -0
  64. data/spec/possible_tests/schedules_other_threads.rb +48 -0
  65. data/spec/possible_tests/test_on_resolve_failed.rb +9 -0
  66. data/spec/possible_tests/test_resolves.rb +27 -0
  67. data/spec/possible_tests/test_write_during_resolve.rb +27 -0
  68. data/spec/possible_tests/works_straight.rb +71 -0
  69. data/spec/spec_helper.rb +5 -0
  70. data/spec/timer_watcher_spec.rb +55 -0
  71. data/spec/unix_listener_spec.rb +25 -0
  72. data/spec/unix_server_spec.rb +25 -0
  73. metadata +184 -0
@@ -0,0 +1,197 @@
1
+ /*
2
+ * loop member variable declarations
3
+ *
4
+ * Copyright (c) 2007,2008,2009,2010 Marc Alexander Lehmann <libev@schmorp.de>
5
+ * All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without modifica-
8
+ * tion, are permitted provided that the following conditions are met:
9
+ *
10
+ * 1. Redistributions of source code must retain the above copyright notice,
11
+ * this list of conditions and the following disclaimer.
12
+ *
13
+ * 2. Redistributions in binary form must reproduce the above copyright
14
+ * notice, this list of conditions and the following disclaimer in the
15
+ * documentation and/or other materials provided with the distribution.
16
+ *
17
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
18
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-
19
+ * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
20
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-
21
+ * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH-
25
+ * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
26
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ *
28
+ * Alternatively, the contents of this file may be used under the terms of
29
+ * the GNU General Public License ("GPL") version 2 or any later version,
30
+ * in which case the provisions of the GPL are applicable instead of
31
+ * the above. If you wish to allow the use of your version of this file
32
+ * only under the terms of the GPL and not to allow others to use your
33
+ * version of this file under the BSD license, indicate your decision
34
+ * by deleting the provisions above and replace them with the notice
35
+ * and other provisions required by the GPL. If you do not delete the
36
+ * provisions above, a recipient may use your version of this file under
37
+ * either the BSD or the GPL.
38
+ */
39
+
40
+ #define VARx(type,name) VAR(name, type name)
41
+
42
+ VARx(ev_tstamp, now_floor) /* last time we refreshed rt_time */
43
+ VARx(ev_tstamp, mn_now) /* monotonic clock "now" */
44
+ VARx(ev_tstamp, rtmn_diff) /* difference realtime - monotonic time */
45
+
46
+ VARx(ev_tstamp, io_blocktime)
47
+ VARx(ev_tstamp, timeout_blocktime)
48
+
49
+ VARx(int, backend)
50
+ VARx(int, activecnt) /* total number of active events ("refcount") */
51
+ VARx(EV_ATOMIC_T, loop_done) /* signal by ev_break */
52
+
53
+ VARx(int, backend_fd)
54
+ VARx(ev_tstamp, backend_fudge) /* assumed typical timer resolution */
55
+ VAR (backend_modify, void (*backend_modify)(EV_P_ int fd, int oev, int nev))
56
+ VAR (backend_poll , void (*backend_poll)(EV_P_ ev_tstamp timeout))
57
+
58
+ VARx(ANFD *, anfds)
59
+ VARx(int, anfdmax)
60
+
61
+ VAR (pendings, ANPENDING *pendings [NUMPRI])
62
+ VAR (pendingmax, int pendingmax [NUMPRI])
63
+ VAR (pendingcnt, int pendingcnt [NUMPRI])
64
+ VARx(ev_prepare, pending_w) /* dummy pending watcher */
65
+
66
+ /* for reverse feeding of events */
67
+ VARx(W *, rfeeds)
68
+ VARx(int, rfeedmax)
69
+ VARx(int, rfeedcnt)
70
+
71
+ #if EV_USE_EVENTFD || EV_GENWRAP
72
+ VARx(int, evfd)
73
+ #endif
74
+ VAR (evpipe, int evpipe [2])
75
+ VARx(ev_io, pipe_w)
76
+
77
+ #if !defined(_WIN32) || EV_GENWRAP
78
+ VARx(pid_t, curpid)
79
+ #endif
80
+
81
+ VARx(char, postfork) /* true if we need to recreate kernel state after fork */
82
+
83
+ #if EV_USE_SELECT || EV_GENWRAP
84
+ VARx(void *, vec_ri)
85
+ VARx(void *, vec_ro)
86
+ VARx(void *, vec_wi)
87
+ VARx(void *, vec_wo)
88
+ #if defined(_WIN32) || EV_GENWRAP
89
+ VARx(void *, vec_eo)
90
+ #endif
91
+ VARx(int, vec_max)
92
+ #endif
93
+
94
+ #if EV_USE_POLL || EV_GENWRAP
95
+ VARx(struct pollfd *, polls)
96
+ VARx(int, pollmax)
97
+ VARx(int, pollcnt)
98
+ VARx(int *, pollidxs) /* maps fds into structure indices */
99
+ VARx(int, pollidxmax)
100
+ #endif
101
+
102
+ #if EV_USE_EPOLL || EV_GENWRAP
103
+ VARx(struct epoll_event *, epoll_events)
104
+ VARx(int, epoll_eventmax)
105
+ #endif
106
+
107
+ #if EV_USE_KQUEUE || EV_GENWRAP
108
+ VARx(struct kevent *, kqueue_changes)
109
+ VARx(int, kqueue_changemax)
110
+ VARx(int, kqueue_changecnt)
111
+ VARx(struct kevent *, kqueue_events)
112
+ VARx(int, kqueue_eventmax)
113
+ #endif
114
+
115
+ #if EV_USE_PORT || EV_GENWRAP
116
+ VARx(struct port_event *, port_events)
117
+ VARx(int, port_eventmax)
118
+ #endif
119
+
120
+ #if EV_USE_IOCP || EV_GENWRAP
121
+ VARx(HANDLE, iocp)
122
+ #endif
123
+
124
+ VARx(int *, fdchanges)
125
+ VARx(int, fdchangemax)
126
+ VARx(int, fdchangecnt)
127
+
128
+ VARx(ANHE *, timers)
129
+ VARx(int, timermax)
130
+ VARx(int, timercnt)
131
+
132
+ #if EV_PERIODIC_ENABLE || EV_GENWRAP
133
+ VARx(ANHE *, periodics)
134
+ VARx(int, periodicmax)
135
+ VARx(int, periodiccnt)
136
+ #endif
137
+
138
+ #if EV_IDLE_ENABLE || EV_GENWRAP
139
+ VAR (idles, ev_idle **idles [NUMPRI])
140
+ VAR (idlemax, int idlemax [NUMPRI])
141
+ VAR (idlecnt, int idlecnt [NUMPRI])
142
+ #endif
143
+ VARx(int, idleall) /* total number */
144
+
145
+ VARx(struct ev_prepare **, prepares)
146
+ VARx(int, preparemax)
147
+ VARx(int, preparecnt)
148
+
149
+ VARx(struct ev_check **, checks)
150
+ VARx(int, checkmax)
151
+ VARx(int, checkcnt)
152
+
153
+ #if EV_FORK_ENABLE || EV_GENWRAP
154
+ VARx(struct ev_fork **, forks)
155
+ VARx(int, forkmax)
156
+ VARx(int, forkcnt)
157
+ #endif
158
+
159
+ #if EV_CLEANUP_ENABLE || EV_GENWRAP
160
+ VARx(struct ev_cleanup **, cleanups)
161
+ VARx(int, cleanupmax)
162
+ VARx(int, cleanupcnt)
163
+ #endif
164
+
165
+ #if EV_ASYNC_ENABLE || EV_GENWRAP
166
+ VARx(EV_ATOMIC_T, async_pending)
167
+ VARx(struct ev_async **, asyncs)
168
+ VARx(int, asyncmax)
169
+ VARx(int, asynccnt)
170
+ #endif
171
+
172
+ #if EV_USE_INOTIFY || EV_GENWRAP
173
+ VARx(int, fs_fd)
174
+ VARx(ev_io, fs_w)
175
+ VARx(char, fs_2625) /* whether we are running in linux 2.6.25 or newer */
176
+ VAR (fs_hash, ANFS fs_hash [EV_INOTIFY_HASHSIZE])
177
+ #endif
178
+
179
+ VARx(EV_ATOMIC_T, sig_pending)
180
+ #if EV_USE_SIGNALFD || EV_GENWRAP
181
+ VARx(int, sigfd)
182
+ VARx(ev_io, sigfd_w)
183
+ VARx(sigset_t, sigfd_set)
184
+ #endif
185
+
186
+ #if EV_FEATURE_API || EV_GENWRAP
187
+ VARx(unsigned int, loop_count) /* total number of loop iterations/blocks */
188
+ VARx(unsigned int, loop_depth) /* #ev_run enters - #ev_run leaves */
189
+
190
+ VARx(void *, userdata)
191
+ VAR (release_cb, void (*release_cb)(EV_P))
192
+ VAR (acquire_cb, void (*acquire_cb)(EV_P))
193
+ VAR (invoke_cb , void (*invoke_cb) (EV_P))
194
+ #endif
195
+
196
+ #undef VARx
197
+
@@ -0,0 +1,153 @@
1
+ /*
2
+ * libev win32 compatibility cruft (_not_ a backend)
3
+ *
4
+ * Copyright (c) 2007,2008,2009 Marc Alexander Lehmann <libev@schmorp.de>
5
+ * All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without modifica-
8
+ * tion, are permitted provided that the following conditions are met:
9
+ *
10
+ * 1. Redistributions of source code must retain the above copyright notice,
11
+ * this list of conditions and the following disclaimer.
12
+ *
13
+ * 2. Redistributions in binary form must reproduce the above copyright
14
+ * notice, this list of conditions and the following disclaimer in the
15
+ * documentation and/or other materials provided with the distribution.
16
+ *
17
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
18
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-
19
+ * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
20
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-
21
+ * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH-
25
+ * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
26
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ *
28
+ * Alternatively, the contents of this file may be used under the terms of
29
+ * the GNU General Public License ("GPL") version 2 or any later version,
30
+ * in which case the provisions of the GPL are applicable instead of
31
+ * the above. If you wish to allow the use of your version of this file
32
+ * only under the terms of the GPL and not to allow others to use your
33
+ * version of this file under the BSD license, indicate your decision
34
+ * by deleting the provisions above and replace them with the notice
35
+ * and other provisions required by the GPL. If you do not delete the
36
+ * provisions above, a recipient may use your version of this file under
37
+ * either the BSD or the GPL.
38
+ */
39
+
40
+ #ifdef _WIN32
41
+
42
+ /* timeb.h is actually xsi legacy functionality */
43
+ #include <sys/timeb.h>
44
+
45
+ /* note: the comment below could not be substantiated, but what would I care */
46
+ /* MSDN says this is required to handle SIGFPE */
47
+ /* my wild guess would be that using something floating-pointy is required */
48
+ /* for the crt to do something about it */
49
+ volatile double SIGFPE_REQ = 0.0f;
50
+
51
+ /* oh, the humanity! */
52
+ static int
53
+ ev_pipe (int filedes [2])
54
+ {
55
+ struct sockaddr_in addr = { 0 };
56
+ int addr_size = sizeof (addr);
57
+ struct sockaddr_in adr2;
58
+ int adr2_size = sizeof (adr2);
59
+ SOCKET listener;
60
+ SOCKET sock [2] = { -1, -1 };
61
+
62
+ if ((listener = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
63
+ return -1;
64
+
65
+ addr.sin_family = AF_INET;
66
+ addr.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
67
+ addr.sin_port = 0;
68
+
69
+ if (bind (listener, (struct sockaddr *)&addr, addr_size))
70
+ goto fail;
71
+
72
+ if (getsockname (listener, (struct sockaddr *)&addr, &addr_size))
73
+ goto fail;
74
+
75
+ if (listen (listener, 1))
76
+ goto fail;
77
+
78
+ if ((sock [0] = socket (AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
79
+ goto fail;
80
+
81
+ if (connect (sock [0], (struct sockaddr *)&addr, addr_size))
82
+ goto fail;
83
+
84
+ if ((sock [1] = accept (listener, 0, 0)) < 0)
85
+ goto fail;
86
+
87
+ /* windows vista returns fantasy port numbers for sockets:
88
+ * example for two interconnected tcp sockets:
89
+ *
90
+ * (Socket::unpack_sockaddr_in getsockname $sock0)[0] == 53364
91
+ * (Socket::unpack_sockaddr_in getpeername $sock0)[0] == 53363
92
+ * (Socket::unpack_sockaddr_in getsockname $sock1)[0] == 53363
93
+ * (Socket::unpack_sockaddr_in getpeername $sock1)[0] == 53365
94
+ *
95
+ * wow! tridirectional sockets!
96
+ *
97
+ * this way of checking ports seems to work:
98
+ */
99
+ if (getpeername (sock [0], (struct sockaddr *)&addr, &addr_size))
100
+ goto fail;
101
+
102
+ if (getsockname (sock [1], (struct sockaddr *)&adr2, &adr2_size))
103
+ goto fail;
104
+
105
+ errno = WSAEINVAL;
106
+ if (addr_size != adr2_size
107
+ || addr.sin_addr.s_addr != adr2.sin_addr.s_addr /* just to be sure, I mean, it's windows */
108
+ || addr.sin_port != adr2.sin_port)
109
+ goto fail;
110
+
111
+ closesocket (listener);
112
+
113
+ #if EV_SELECT_IS_WINSOCKET
114
+ filedes [0] = EV_WIN32_HANDLE_TO_FD (sock [0]);
115
+ filedes [1] = EV_WIN32_HANDLE_TO_FD (sock [1]);
116
+ #else
117
+ /* when select isn't winsocket, we also expect socket, connect, accept etc.
118
+ * to work on fds */
119
+ filedes [0] = sock [0];
120
+ filedes [1] = sock [1];
121
+ #endif
122
+
123
+ return 0;
124
+
125
+ fail:
126
+ closesocket (listener);
127
+
128
+ if (sock [0] != INVALID_SOCKET) closesocket (sock [0]);
129
+ if (sock [1] != INVALID_SOCKET) closesocket (sock [1]);
130
+
131
+ return -1;
132
+ }
133
+
134
+ #undef pipe
135
+ #define pipe(filedes) ev_pipe (filedes)
136
+
137
+ #define EV_HAVE_EV_TIME 1
138
+ ev_tstamp
139
+ ev_time (void)
140
+ {
141
+ FILETIME ft;
142
+ ULARGE_INTEGER ui;
143
+
144
+ GetSystemTimeAsFileTime (&ft);
145
+ ui.u.LowPart = ft.dwLowDateTime;
146
+ ui.u.HighPart = ft.dwHighDateTime;
147
+
148
+ /* msvc cannot convert ulonglong to double... yes, it is that sucky */
149
+ return (LONGLONG)(ui.QuadPart - 116444736000000000) * 1e-7;
150
+ }
151
+
152
+ #endif
153
+
@@ -0,0 +1,186 @@
1
+ /* DO NOT EDIT, automatically generated by update_ev_wrap */
2
+ #ifndef EV_WRAP_H
3
+ #define EV_WRAP_H
4
+ #define now_floor ((loop)->now_floor)
5
+ #define mn_now ((loop)->mn_now)
6
+ #define rtmn_diff ((loop)->rtmn_diff)
7
+ #define io_blocktime ((loop)->io_blocktime)
8
+ #define timeout_blocktime ((loop)->timeout_blocktime)
9
+ #define backend ((loop)->backend)
10
+ #define activecnt ((loop)->activecnt)
11
+ #define loop_done ((loop)->loop_done)
12
+ #define backend_fd ((loop)->backend_fd)
13
+ #define backend_fudge ((loop)->backend_fudge)
14
+ #define backend_modify ((loop)->backend_modify)
15
+ #define backend_poll ((loop)->backend_poll)
16
+ #define anfds ((loop)->anfds)
17
+ #define anfdmax ((loop)->anfdmax)
18
+ #define pendings ((loop)->pendings)
19
+ #define pendingmax ((loop)->pendingmax)
20
+ #define pendingcnt ((loop)->pendingcnt)
21
+ #define pending_w ((loop)->pending_w)
22
+ #define rfeeds ((loop)->rfeeds)
23
+ #define rfeedmax ((loop)->rfeedmax)
24
+ #define rfeedcnt ((loop)->rfeedcnt)
25
+ #define evfd ((loop)->evfd)
26
+ #define evpipe ((loop)->evpipe)
27
+ #define pipe_w ((loop)->pipe_w)
28
+ #define curpid ((loop)->curpid)
29
+ #define postfork ((loop)->postfork)
30
+ #define vec_ri ((loop)->vec_ri)
31
+ #define vec_ro ((loop)->vec_ro)
32
+ #define vec_wi ((loop)->vec_wi)
33
+ #define vec_wo ((loop)->vec_wo)
34
+ #define vec_eo ((loop)->vec_eo)
35
+ #define vec_max ((loop)->vec_max)
36
+ #define polls ((loop)->polls)
37
+ #define pollmax ((loop)->pollmax)
38
+ #define pollcnt ((loop)->pollcnt)
39
+ #define pollidxs ((loop)->pollidxs)
40
+ #define pollidxmax ((loop)->pollidxmax)
41
+ #define epoll_events ((loop)->epoll_events)
42
+ #define epoll_eventmax ((loop)->epoll_eventmax)
43
+ #define kqueue_changes ((loop)->kqueue_changes)
44
+ #define kqueue_changemax ((loop)->kqueue_changemax)
45
+ #define kqueue_changecnt ((loop)->kqueue_changecnt)
46
+ #define kqueue_events ((loop)->kqueue_events)
47
+ #define kqueue_eventmax ((loop)->kqueue_eventmax)
48
+ #define port_events ((loop)->port_events)
49
+ #define port_eventmax ((loop)->port_eventmax)
50
+ #define iocp ((loop)->iocp)
51
+ #define fdchanges ((loop)->fdchanges)
52
+ #define fdchangemax ((loop)->fdchangemax)
53
+ #define fdchangecnt ((loop)->fdchangecnt)
54
+ #define timers ((loop)->timers)
55
+ #define timermax ((loop)->timermax)
56
+ #define timercnt ((loop)->timercnt)
57
+ #define periodics ((loop)->periodics)
58
+ #define periodicmax ((loop)->periodicmax)
59
+ #define periodiccnt ((loop)->periodiccnt)
60
+ #define idles ((loop)->idles)
61
+ #define idlemax ((loop)->idlemax)
62
+ #define idlecnt ((loop)->idlecnt)
63
+ #define idleall ((loop)->idleall)
64
+ #define prepares ((loop)->prepares)
65
+ #define preparemax ((loop)->preparemax)
66
+ #define preparecnt ((loop)->preparecnt)
67
+ #define checks ((loop)->checks)
68
+ #define checkmax ((loop)->checkmax)
69
+ #define checkcnt ((loop)->checkcnt)
70
+ #define forks ((loop)->forks)
71
+ #define forkmax ((loop)->forkmax)
72
+ #define forkcnt ((loop)->forkcnt)
73
+ #define cleanups ((loop)->cleanups)
74
+ #define cleanupmax ((loop)->cleanupmax)
75
+ #define cleanupcnt ((loop)->cleanupcnt)
76
+ #define async_pending ((loop)->async_pending)
77
+ #define asyncs ((loop)->asyncs)
78
+ #define asyncmax ((loop)->asyncmax)
79
+ #define asynccnt ((loop)->asynccnt)
80
+ #define fs_fd ((loop)->fs_fd)
81
+ #define fs_w ((loop)->fs_w)
82
+ #define fs_2625 ((loop)->fs_2625)
83
+ #define fs_hash ((loop)->fs_hash)
84
+ #define sig_pending ((loop)->sig_pending)
85
+ #define sigfd ((loop)->sigfd)
86
+ #define sigfd_w ((loop)->sigfd_w)
87
+ #define sigfd_set ((loop)->sigfd_set)
88
+ #define loop_count ((loop)->loop_count)
89
+ #define loop_depth ((loop)->loop_depth)
90
+ #define userdata ((loop)->userdata)
91
+ #define release_cb ((loop)->release_cb)
92
+ #define acquire_cb ((loop)->acquire_cb)
93
+ #define invoke_cb ((loop)->invoke_cb)
94
+ #else
95
+ #undef EV_WRAP_H
96
+ #undef now_floor
97
+ #undef mn_now
98
+ #undef rtmn_diff
99
+ #undef io_blocktime
100
+ #undef timeout_blocktime
101
+ #undef backend
102
+ #undef activecnt
103
+ #undef loop_done
104
+ #undef backend_fd
105
+ #undef backend_fudge
106
+ #undef backend_modify
107
+ #undef backend_poll
108
+ #undef anfds
109
+ #undef anfdmax
110
+ #undef pendings
111
+ #undef pendingmax
112
+ #undef pendingcnt
113
+ #undef pending_w
114
+ #undef rfeeds
115
+ #undef rfeedmax
116
+ #undef rfeedcnt
117
+ #undef evfd
118
+ #undef evpipe
119
+ #undef pipe_w
120
+ #undef curpid
121
+ #undef postfork
122
+ #undef vec_ri
123
+ #undef vec_ro
124
+ #undef vec_wi
125
+ #undef vec_wo
126
+ #undef vec_eo
127
+ #undef vec_max
128
+ #undef polls
129
+ #undef pollmax
130
+ #undef pollcnt
131
+ #undef pollidxs
132
+ #undef pollidxmax
133
+ #undef epoll_events
134
+ #undef epoll_eventmax
135
+ #undef kqueue_changes
136
+ #undef kqueue_changemax
137
+ #undef kqueue_changecnt
138
+ #undef kqueue_events
139
+ #undef kqueue_eventmax
140
+ #undef port_events
141
+ #undef port_eventmax
142
+ #undef iocp
143
+ #undef fdchanges
144
+ #undef fdchangemax
145
+ #undef fdchangecnt
146
+ #undef timers
147
+ #undef timermax
148
+ #undef timercnt
149
+ #undef periodics
150
+ #undef periodicmax
151
+ #undef periodiccnt
152
+ #undef idles
153
+ #undef idlemax
154
+ #undef idlecnt
155
+ #undef idleall
156
+ #undef prepares
157
+ #undef preparemax
158
+ #undef preparecnt
159
+ #undef checks
160
+ #undef checkmax
161
+ #undef checkcnt
162
+ #undef forks
163
+ #undef forkmax
164
+ #undef forkcnt
165
+ #undef cleanups
166
+ #undef cleanupmax
167
+ #undef cleanupcnt
168
+ #undef async_pending
169
+ #undef asyncs
170
+ #undef asyncmax
171
+ #undef asynccnt
172
+ #undef fs_fd
173
+ #undef fs_w
174
+ #undef fs_2625
175
+ #undef fs_hash
176
+ #undef sig_pending
177
+ #undef sigfd
178
+ #undef sigfd_w
179
+ #undef sigfd_set
180
+ #undef loop_count
181
+ #undef loop_depth
182
+ #undef userdata
183
+ #undef release_cb
184
+ #undef acquire_cb
185
+ #undef invoke_cb
186
+ #endif