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

Comparing libev/ev.pod (file contents):
Revision 1.2 by root, Mon Nov 12 08:02:55 2007 UTC vs.
Revision 1.8 by root, Mon Nov 12 08:20:02 2007 UTC

8 8
9=head1 DESCRIPTION 9=head1 DESCRIPTION
10 10
11Libev is an event loop: you register interest in certain events (such as a 11Libev is an event loop: you register interest in certain events (such as a
12file descriptor being readable or a timeout occuring), and it will manage 12file descriptor being readable or a timeout occuring), and it will manage
13these event sources and provide your program events. 13these event sources and provide your program with events.
14 14
15To do this, it must take more or less complete control over your process 15To do this, it must take more or less complete control over your process
16(or thread) by executing the I<event loop> handler, and will then 16(or thread) by executing the I<event loop> handler, and will then
17communicate events via a callback mechanism. 17communicate events via a callback mechanism.
18 18
25 25
26Libev supports select, poll, the linux-specific epoll and the bsd-specific 26Libev supports select, poll, the linux-specific epoll and the bsd-specific
27kqueue mechanisms for file descriptor events, relative timers, absolute 27kqueue mechanisms for file descriptor events, relative timers, absolute
28timers with customised rescheduling, signal events, process status change 28timers with customised rescheduling, signal events, process status change
29events (related to SIGCHLD), and event watchers dealing with the event 29events (related to SIGCHLD), and event watchers dealing with the event
30loop mechanism itself (idle, prepare and check watchers). 30loop mechanism itself (idle, prepare and check watchers). It also is quite
31fast (see this L<benchmark|http://libev.schmorp.de/bench.html> comparing
32it to libevent for example).
31 33
32=head1 CONVENTIONS 34=head1 CONVENTIONS
33 35
34Libev is very configurable. In this manual the default configuration 36Libev is very configurable. In this manual the default configuration
35will be described, which supports multiple event loops. For more info 37will be described, which supports multiple event loops. For more info
36about various configuraiton options please have a look at the file 38about various configuration options please have a look at the file
37F<README.embed> in the libev distribution. If libev was configured without 39F<README.embed> in the libev distribution. If libev was configured without
38support for multiple event loops, then all functions taking an initial 40support for multiple event loops, then all functions taking an initial
39argument of name C<loop> (which is always of type C<struct ev_loop *>) 41argument of name C<loop> (which is always of type C<struct ev_loop *>)
40will not have this argument. 42will not have this argument.
41 43
69not a problem. 71not a problem.
70 72
71=item ev_set_allocator (void *(*cb)(void *ptr, long size)) 73=item ev_set_allocator (void *(*cb)(void *ptr, long size))
72 74
73Sets the allocation function to use (the prototype is similar to the 75Sets the allocation function to use (the prototype is similar to the
74realloc function). It is used to allocate and free memory (no surprises 76realloc C function, the semantics are identical). It is used to allocate
75here). If it returns zero when memory needs to be allocated, the library 77and free memory (no surprises here). If it returns zero when memory
76might abort or take some potentially destructive action. The default is 78needs to be allocated, the library might abort or take some potentially
77your system realloc function. 79destructive action. The default is your system realloc function.
78 80
79You could override this function in high-availability programs to, say, 81You could override this function in high-availability programs to, say,
80free some memory if it cannot allocate memory, to use a special allocator, 82free some memory if it cannot allocate memory, to use a special allocator,
81or even to sleep a while and retry until some memory is available. 83or even to sleep a while and retry until some memory is available.
82 84
84 86
85Set the callback function to call on a retryable syscall error (such 87Set the callback function to call on a retryable syscall error (such
86as failed select, poll, epoll_wait). The message is a printable string 88as failed select, poll, epoll_wait). The message is a printable string
87indicating the system call or subsystem causing the problem. If this 89indicating the system call or subsystem causing the problem. If this
88callback is set, then libev will expect it to remedy the sitution, no 90callback is set, then libev will expect it to remedy the sitution, no
89matter what, when it returns. That is, libev will geenrally retry the 91matter what, when it returns. That is, libev will generally retry the
90requested operation, or, if the condition doesn't go away, do bad stuff 92requested operation, or, if the condition doesn't go away, do bad stuff
91(such as abort). 93(such as abort).
92 94
93=back 95=back
94 96
98types of such loops, the I<default> loop, which supports signals and child 100types of such loops, the I<default> loop, which supports signals and child
99events, and dynamically created loops which do not. 101events, and dynamically created loops which do not.
100 102
101If 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
102in 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
103create, you also create another event loop. Libev itself does no lockign 105create, you also create another event loop. Libev itself does no locking
104whatsoever, so if you mix calls to different event loops, make sure you 106whatsoever, so if you mix calls to the same event loop in different
105lock (this is usually a bad idea, though, even if done right). 107threads, make sure you lock (this is usually a bad idea, though, even if
108done correctly, because its hideous and inefficient).
106 109
107=over 4 110=over 4
108 111
109=item struct ev_loop *ev_default_loop (unsigned int flags) 112=item struct ev_loop *ev_default_loop (unsigned int flags)
110 113
115 118
116If 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
117function. 120function.
118 121
119The flags argument can be used to specify special behaviour or specific 122The flags argument can be used to specify special behaviour or specific
120backends to use, and is usually specified as 0 (or EVFLAG_AUTO) 123backends to use, and is usually specified as 0 (or EVFLAG_AUTO).
121 124
122It supports the following flags: 125It supports the following flags:
123 126
124=over 4 127=over 4
125 128
128The default flags value. Use this if you have no clue (its the right 131The default flags value. Use this if you have no clue (its the right
129thing, believe me). 132thing, believe me).
130 133
131=item EVFLAG_NOENV 134=item EVFLAG_NOENV
132 135
133If 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
134at the environment variable C<LIBEV_FLAGS>. Otherwise (the default), this 137or setgid) then libev will I<not> look at the environment variable
135environment 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
136to 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
137bugs. 141around bugs.
138 142
139=item EVMETHOD_SELECT portable select backend 143=item EVMETHOD_SELECT portable select backend
140 144
141=item EVMETHOD_POLL poll backend (everywhere except windows) 145=item EVMETHOD_POLL poll backend (everywhere except windows)
142 146
293 297
294As long as your watcher is active (has been started but not stopped) you 298As long as your watcher is active (has been started but not stopped) you
295must not touch the values stored in it. Most specifically you must never 299must not touch the values stored in it. Most specifically you must never
296reinitialise it or call its set method. 300reinitialise it or call its set method.
297 301
298You cna check wether an event is active by calling the C<ev_is_active 302You cna check whether an event is active by calling the C<ev_is_active
299(watcher *)> macro. To see wether an event is outstanding (but the 303(watcher *)> macro. To see whether an event is outstanding (but the
300callback for it has not been called yet) you cna use the C<ev_is_pending 304callback for it has not been called yet) you cna use the C<ev_is_pending
301(watcher *)> macro. 305(watcher *)> macro.
302 306
303Each and every callback receives the event loop pointer as first, the 307Each and every callback receives the event loop pointer as first, the
304registered watcher structure as second, and a bitset of received events as 308registered watcher structure as second, and a bitset of received events as
400This section describes each watcher in detail, but will not repeat 404This section describes each watcher in detail, but will not repeat
401information given in the last section. 405information given in the last section.
402 406
403=head2 struct ev_io - is my file descriptor readable or writable 407=head2 struct ev_io - is my file descriptor readable or writable
404 408
405I/O watchers check wether a file descriptor is readable or writable 409I/O watchers check whether a file descriptor is readable or writable
406in each iteration of the event loop (This behaviour is called 410in each iteration of the event loop (This behaviour is called
407level-triggering because you keep receiving events as long as the 411level-triggering because you keep receiving events as long as the
408condition persists. Remember you cna stop the watcher if you don't want to 412condition persists. Remember you cna stop the watcher if you don't want to
409act on the event and neither want to receive future events). 413act on the event and neither want to receive future events).
414
415In general you can register as many read and/or write event watchers oer
416fd as you want (as long as you don't confuse yourself). Setting all file
417descriptors to non-blocking mode is also usually a good idea (but not
418required if you know what you are doing).
419
420You have to be careful with dup'ed file descriptors, though. Some backends
421(the linux epoll backend is a notable example) cannot handle dup'ed file
422descriptors correctly if you register interest in two or more fds pointing
423to the same file/socket etc. description.
424
425If you must do this, then force the use of a known-to-be-good backend
426(at the time of this writing, this includes only EVMETHOD_SELECT and
427EVMETHOD_POLL).
410 428
411=over 4 429=over 4
412 430
413=item ev_io_init (ev_io *, callback, int fd, int events) 431=item ev_io_init (ev_io *, callback, int fd, int events)
414 432
467state where you do not expect data to travel on the socket, you can stop 485state where you do not expect data to travel on the socket, you can stop
468the timer, and again will automatically restart it if need be. 486the timer, and again will automatically restart it if need be.
469 487
470=back 488=back
471 489
472=head2 ev_periodic 490=head2 ev_periodic - to cron or not to cron it
473 491
474Periodic watchers are also timers of a kind, but they are very versatile 492Periodic watchers are also timers of a kind, but they are very versatile
475(and unfortunately a bit complex). 493(and unfortunately a bit complex).
476 494
477Unlike ev_timer's, they are not based on real time (or relative time) 495Unlike ev_timer's, they are not based on real time (or relative time)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines