ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev.pod
(Generate patch)

Comparing libev/ev.pod (file contents):
Revision 1.7 by root, Mon Nov 12 08:16:02 2007 UTC vs.
Revision 1.9 by root, Mon Nov 12 08:29:11 2007 UTC

63you linked against by calling the functions C<ev_version_major> and 63you linked against by calling the functions C<ev_version_major> and
64C<ev_version_minor>. If you want, you can compare against the global 64C<ev_version_minor>. If you want, you can compare against the global
65symbols C<EV_VERSION_MAJOR> and C<EV_VERSION_MINOR>, which specify the 65symbols C<EV_VERSION_MAJOR> and C<EV_VERSION_MINOR>, which specify the
66version of the library your program was compiled against. 66version of the library your program was compiled against.
67 67
68Usually, its a good idea to terminate if the major versions mismatch, 68Usually, it's a good idea to terminate if the major versions mismatch,
69as this indicates an incompatible change. Minor versions are usually 69as this indicates an incompatible change. Minor versions are usually
70compatible to older versions, so a larger minor version alone is usually 70compatible to older versions, so a larger minor version alone is usually
71not a problem. 71not a problem.
72 72
73=item ev_set_allocator (void *(*cb)(void *ptr, long size)) 73=item ev_set_allocator (void *(*cb)(void *ptr, long size))
103If you use threads, a common model is to run the default event loop 103If you use threads, a common model is to run the default event loop
104in your main thread (or in a separate thrad) and for each thread you 104in your main thread (or in a separate thrad) and for each thread you
105create, you also create another event loop. Libev itself does no locking 105create, you also create another event loop. Libev itself does no locking
106whatsoever, so if you mix calls to the same event loop in different 106whatsoever, so if you mix calls to the same event loop in different
107threads, make sure you lock (this is usually a bad idea, though, even if 107threads, make sure you lock (this is usually a bad idea, though, even if
108done correctly, because its hideous and inefficient). 108done correctly, because it's hideous and inefficient).
109 109
110=over 4 110=over 4
111 111
112=item struct ev_loop *ev_default_loop (unsigned int flags) 112=item struct ev_loop *ev_default_loop (unsigned int flags)
113 113
118 118
119If you don't know what event loop to use, use the one returned from this 119If you don't know what event loop to use, use the one returned from this
120function. 120function.
121 121
122The flags argument can be used to specify special behaviour or specific 122The flags argument can be used to specify special behaviour or specific
123backends to use, and is usually specified as 0 (or EVFLAG_AUTO) 123backends to use, and is usually specified as 0 (or EVFLAG_AUTO).
124 124
125It supports the following flags: 125It supports the following flags:
126 126
127=over 4 127=over 4
128 128
129=item EVFLAG_AUTO 129=item EVFLAG_AUTO
130 130
131The default flags value. Use this if you have no clue (its the right 131The default flags value. Use this if you have no clue (it's the right
132thing, believe me). 132thing, believe me).
133 133
134=item EVFLAG_NOENV 134=item EVFLAG_NOENV
135 135
136If this flag bit is ored into the flag value then libev will I<not> look 136If this flag bit is ored into the flag value (or the program runs setuid
137at the environment variable C<LIBEV_FLAGS>. Otherwise (the default), this 137or setgid) then libev will I<not> look at the environment variable
138environment variable will override the flags completely. This is useful 138C<LIBEV_FLAGS>. Otherwise (the default), this environment variable will
139override the flags completely if it is found in the environment. This is
139to try out specific backends to tets their performance, or to work around 140useful to try out specific backends to test their performance, or to work
140bugs. 141around bugs.
141 142
142=item EVMETHOD_SELECT portable select backend 143=item EVMETHOD_SELECT (portable select backend)
143 144
144=item EVMETHOD_POLL poll backend (everywhere except windows) 145=item EVMETHOD_POLL (poll backend, available everywhere except on windows)
145 146
146=item EVMETHOD_EPOLL linux only 147=item EVMETHOD_EPOLL (linux only)
147 148
148=item EVMETHOD_KQUEUE some bsds only 149=item EVMETHOD_KQUEUE (some bsds only)
149 150
150=item EVMETHOD_DEVPOLL solaris 8 only 151=item EVMETHOD_DEVPOLL (solaris 8 only)
151 152
152=item EVMETHOD_PORT solaris 10 only 153=item EVMETHOD_PORT (solaris 10 only)
153 154
154If one or more of these are ored into the flags value, then only these 155If one or more of these are ored into the flags value, then only these
155backends will be tried (in the reverse order as given here). If one are 156backends will be tried (in the reverse order as given here). If one are
156specified, any backend will do. 157specified, any backend will do.
157 158
166 167
167=item ev_default_destroy () 168=item ev_default_destroy ()
168 169
169Destroys the default loop again (frees all memory and kernel state 170Destroys the default loop again (frees all memory and kernel state
170etc.). This stops all registered event watchers (by not touching them in 171etc.). This stops all registered event watchers (by not touching them in
171any way whatsoever, although you cnanot rely on this :). 172any way whatsoever, although you cannot rely on this :).
172 173
173=item ev_loop_destroy (loop) 174=item ev_loop_destroy (loop)
174 175
175Like C<ev_default_destroy>, but destroys an event loop created by an 176Like C<ev_default_destroy>, but destroys an event loop created by an
176earlier call to C<ev_loop_new>. 177earlier call to C<ev_loop_new>.
184 185
185You I<must> call this function after forking if and only if you want to 186You I<must> call this function after forking if and only if you want to
186use the event library in both processes. If you just fork+exec, you don't 187use the event library in both processes. If you just fork+exec, you don't
187have to call it. 188have to call it.
188 189
189The function itself is quite fast and its usually not a problem to call 190The function itself is quite fast and it's usually not a problem to call
190it just in case after a fork. To make this easy, the function will fit in 191it just in case after a fork. To make this easy, the function will fit in
191quite nicely into a call to C<pthread_atfork>: 192quite nicely into a call to C<pthread_atfork>:
192 193
193 pthread_atfork (0, 0, ev_default_fork); 194 pthread_atfork (0, 0, ev_default_fork);
194 195
201=item unsigned int ev_method (loop) 202=item unsigned int ev_method (loop)
202 203
203Returns one of the C<EVMETHOD_*> flags indicating the event backend in 204Returns one of the C<EVMETHOD_*> flags indicating the event backend in
204use. 205use.
205 206
206=item ev_tstamp = ev_now (loop) 207=item ev_tstamp ev_now (loop)
207 208
208Returns the current "event loop time", which is the time the event loop 209Returns the current "event loop time", which is the time the event loop
209got events and started processing them. This timestamp does not change 210got events and started processing them. This timestamp does not change
210as long as callbacks are being processed, and this is also the base time 211as long as callbacks are being processed, and this is also the base time
211used for relative timers. You can treat it as the timestamp of the event 212used for relative timers. You can treat it as the timestamp of the event
220If the flags argument is specified as 0, it will not return until either 221If the flags argument is specified as 0, it will not return until either
221no event watchers are active anymore or C<ev_unloop> was called. 222no event watchers are active anymore or C<ev_unloop> was called.
222 223
223A flags value of C<EVLOOP_NONBLOCK> will look for new events, will handle 224A flags value of C<EVLOOP_NONBLOCK> will look for new events, will handle
224those events and any outstanding ones, but will not block your process in 225those events and any outstanding ones, but will not block your process in
225case there are no events. 226case there are no events and will return after one iteration of the loop.
226 227
227A flags value of C<EVLOOP_ONESHOT> will look for new events (waiting if 228A flags value of C<EVLOOP_ONESHOT> will look for new events (waiting if
228neccessary) and will handle those and any outstanding ones. It will block 229neccessary) and will handle those and any outstanding ones. It will block
229your process until at least one new event arrives. 230your process until at least one new event arrives, and will return after
231one iteration of the loop.
230 232
231This flags value could be used to implement alternative looping 233This flags value could be used to implement alternative looping
232constructs, but the C<prepare> and C<check> watchers provide a better and 234constructs, but the C<prepare> and C<check> watchers provide a better and
233more generic mechanism. 235more generic mechanism.
234 236
235=item ev_unloop (loop, how) 237=item ev_unloop (loop, how)
236 238
237Can be used to make a call to C<ev_loop> return early. The C<how> argument 239Can be used to make a call to C<ev_loop> return early (but only after it
240has processed all outstanding events). The C<how> argument must be either
238must be either C<EVUNLOOP_ONCE>, which will make the innermost C<ev_loop> 241C<EVUNLOOP_ONCE>, which will make the innermost C<ev_loop> call return, or
239call return, or C<EVUNLOOP_ALL>, which will make all nested C<ev_loop> 242C<EVUNLOOP_ALL>, which will make all nested C<ev_loop> calls return.
240calls return.
241 243
242=item ev_ref (loop) 244=item ev_ref (loop)
243 245
244=item ev_unref (loop) 246=item ev_unref (loop)
245 247
246Ref/unref can be used to add or remove a refcount on the event loop: Every 248Ref/unref can be used to add or remove a reference count on the event
247watcher keeps one reference. If you have a long-runing watcher you never 249loop: Every watcher keeps one reference, and as long as the reference
248unregister that should not keep ev_loop from running, ev_unref() after 250count is nonzero, C<ev_loop> will not return on its own. If you have
249starting, and ev_ref() before stopping it. Libev itself uses this for 251a watcher you never unregister that should not keep C<ev_loop> from
250example for its internal signal pipe: It is not visible to you as a user 252returning, ev_unref() after starting, and ev_ref() before stopping it. For
251and should not keep C<ev_loop> from exiting if the work is done. It is 253example, libev itself uses this for its internal signal pipe: It is not
252also an excellent way to do this for generic recurring timers or from 254visible to the libev user and should not keep C<ev_loop> from exiting if
253within third-party libraries. Just remember to unref after start and ref 255no event watchers registered by it are active. It is also an excellent
254before stop. 256way to do this for generic recurring timers or from within third-party
257libraries. Just remember to I<unref after start> and I<ref before stop>.
255 258
256=back 259=back
257 260
258=head1 ANATOMY OF A WATCHER 261=head1 ANATOMY OF A WATCHER
259 262
409in each iteration of the event loop (This behaviour is called 412in each iteration of the event loop (This behaviour is called
410level-triggering because you keep receiving events as long as the 413level-triggering because you keep receiving events as long as the
411condition persists. Remember you cna stop the watcher if you don't want to 414condition persists. Remember you cna stop the watcher if you don't want to
412act on the event and neither want to receive future events). 415act on the event and neither want to receive future events).
413 416
417In general you can register as many read and/or write event watchers oer
418fd as you want (as long as you don't confuse yourself). Setting all file
419descriptors to non-blocking mode is also usually a good idea (but not
420required if you know what you are doing).
421
422You have to be careful with dup'ed file descriptors, though. Some backends
423(the linux epoll backend is a notable example) cannot handle dup'ed file
424descriptors correctly if you register interest in two or more fds pointing
425to the same file/socket etc. description.
426
427If you must do this, then force the use of a known-to-be-good backend
428(at the time of this writing, this includes only EVMETHOD_SELECT and
429EVMETHOD_POLL).
430
414=over 4 431=over 4
415 432
416=item ev_io_init (ev_io *, callback, int fd, int events) 433=item ev_io_init (ev_io *, callback, int fd, int events)
417 434
418=item ev_io_set (ev_io *, int fd, int events) 435=item ev_io_set (ev_io *, int fd, int events)
431The timers are based on real time, that is, if you register an event that 448The timers are based on real time, that is, if you register an event that
432times out after an hour and youreset your system clock to last years 449times out after an hour and youreset your system clock to last years
433time, it will still time out after (roughly) and hour. "Roughly" because 450time, it will still time out after (roughly) and hour. "Roughly" because
434detecting time jumps is hard, and soem inaccuracies are unavoidable (the 451detecting time jumps is hard, and soem inaccuracies are unavoidable (the
435monotonic clock option helps a lot here). 452monotonic clock option helps a lot here).
453
454The relative timeouts are calculated relative to the C<ev_now ()>
455time. This is usually the right thing as this timestamp refers to the time
456of the event triggering whatever timeout you are modifying/starting. If
457you suspect event processing to be delayed and you *need* to base the timeout
458ion the current time, use something like this to adjust for this:
459
460 ev_timer_set (&timer, after + ev_now () - ev_time (), 0.);
436 461
437=over 4 462=over 4
438 463
439=item ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat) 464=item ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)
440 465
570 595
571=head2 ev_signal - signal me when a signal gets signalled 596=head2 ev_signal - signal me when a signal gets signalled
572 597
573Signal watchers will trigger an event when the process receives a specific 598Signal watchers will trigger an event when the process receives a specific
574signal one or more times. Even though signals are very asynchronous, libev 599signal one or more times. Even though signals are very asynchronous, libev
575will try its best to deliver signals synchronously, i.e. as part of the 600will try it's best to deliver signals synchronously, i.e. as part of the
576normal event processing, like any other event. 601normal event processing, like any other event.
577 602
578You cna configure as many watchers as you like per signal. Only when the 603You cna configure as many watchers as you like per signal. Only when the
579first watcher gets started will libev actually register a signal watcher 604first watcher gets started will libev actually register a signal watcher
580with the kernel (thus it coexists with your own signal handlers as long 605with the kernel (thus it coexists with your own signal handlers as long

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines