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

Comparing libev/ev.pod (file contents):
Revision 1.1 by root, Mon Nov 12 07:58:13 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
42=head1 TIME AND OTHER GLOBAL FUNCTIONS 44=head1 TIME AND OTHER GLOBAL FUNCTIONS
43 45
44Libev represents time as a single floating point number. This type is 46Libev represents time as a single floating point number, representing the
47(fractional) number of seconds since the (POSIX) epoch (somewhere near
48the beginning of 1970, details are complicated, don't ask). This type is
45called C<ev_tstamp>, which is what you should use too. It usually aliases 49called C<ev_tstamp>, which is what you should use too. It usually aliases
46to the double type in C. 50to the double type in C.
47 51
48=over 4 52=over 4
49 53
67not a problem. 71not a problem.
68 72
69=item ev_set_allocator (void *(*cb)(void *ptr, long size)) 73=item ev_set_allocator (void *(*cb)(void *ptr, long size))
70 74
71Sets the allocation function to use (the prototype is similar to the 75Sets the allocation function to use (the prototype is similar to the
72realloc function). It is used to allocate and free memory (no surprises 76realloc C function, the semantics are identical). It is used to allocate
73here). If it returns zero when memory needs to be allocated, the library 77and free memory (no surprises here). If it returns zero when memory
74might abort or take some potentially destructive action. The default is 78needs to be allocated, the library might abort or take some potentially
75your system realloc function. 79destructive action. The default is your system realloc function.
76 80
77You could override this function in high-availability programs to, say, 81You could override this function in high-availability programs to, say,
78free 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,
79or 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.
80 84
82 86
83Set the callback function to call on a retryable syscall error (such 87Set the callback function to call on a retryable syscall error (such
84as failed select, poll, epoll_wait). The message is a printable string 88as failed select, poll, epoll_wait). The message is a printable string
85indicating the system call or subsystem causing the problem. If this 89indicating the system call or subsystem causing the problem. If this
86callback 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
87matter what, when it returns. That is, libev will geenrally retry the 91matter what, when it returns. That is, libev will generally retry the
88requested 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
89(such as abort). 93(such as abort).
90 94
91=back 95=back
92 96
96types 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
97events, and dynamically created loops which do not. 101events, and dynamically created loops which do not.
98 102
99If 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
100in 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
101create, you also create another event loop. Libev itself does no lockign 105create, you also create another event loop. Libev itself does no locking
102whatsoever, 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
103lock (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).
104 109
105=over 4 110=over 4
106 111
107=item struct ev_loop *ev_default_loop (unsigned int flags) 112=item struct ev_loop *ev_default_loop (unsigned int flags)
108 113
113 118
114If 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
115function. 120function.
116 121
117The flags argument can be used to specify special behaviour or specific 122The flags argument can be used to specify special behaviour or specific
118backends to use, and is usually specified as 0 (or EVFLAG_AUTO) 123backends to use, and is usually specified as 0 (or EVFLAG_AUTO).
119 124
120It supports the following flags: 125It supports the following flags:
121 126
122=over 4 127=over 4
123 128
126The 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
127thing, believe me). 132thing, believe me).
128 133
129=item EVFLAG_NOENV 134=item EVFLAG_NOENV
130 135
131If 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
132at the environment variable C<LIBEV_FLAGS>. Otherwise (the default), this 137or setgid) then libev will I<not> look at the environment variable
133environment 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
134to 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
135bugs. 141around bugs.
136 142
137=item EVMETHOD_SELECT portable select backend 143=item EVMETHOD_SELECT portable select backend
138 144
139=item EVMETHOD_POLL poll backend (everywhere except windows) 145=item EVMETHOD_POLL poll backend (everywhere except windows)
140 146
291 297
292As 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
293must 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
294reinitialise it or call its set method. 300reinitialise it or call its set method.
295 301
296You 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
297(watcher *)> macro. To see wether an event is outstanding (but the 303(watcher *)> macro. To see whether an event is outstanding (but the
298callback 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
299(watcher *)> macro. 305(watcher *)> macro.
300 306
301Each and every callback receives the event loop pointer as first, the 307Each and every callback receives the event loop pointer as first, the
302registered watcher structure as second, and a bitset of received events as 308registered watcher structure as second, and a bitset of received events as
398This section describes each watcher in detail, but will not repeat 404This section describes each watcher in detail, but will not repeat
399information given in the last section. 405information given in the last section.
400 406
401=head2 struct ev_io - is my file descriptor readable or writable 407=head2 struct ev_io - is my file descriptor readable or writable
402 408
403I/O watchers check wether a file descriptor is readable or writable 409I/O watchers check whether a file descriptor is readable or writable
404in each iteration of the event loop (This behaviour is called 410in each iteration of the event loop (This behaviour is called
405level-triggering because you keep receiving events as long as the 411level-triggering because you keep receiving events as long as the
406condition 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
407act 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).
408 428
409=over 4 429=over 4
410 430
411=item ev_io_init (ev_io *, callback, int fd, int events) 431=item ev_io_init (ev_io *, callback, int fd, int events)
412 432
465state 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
466the timer, and again will automatically restart it if need be. 486the timer, and again will automatically restart it if need be.
467 487
468=back 488=back
469 489
470=head2 ev_periodic 490=head2 ev_periodic - to cron or not to cron it
471 491
472Periodic 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
473(and unfortunately a bit complex). 493(and unfortunately a bit complex).
474 494
475Unlike 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