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

Comparing libev/ev.pod (file contents):
Revision 1.214 by root, Wed Nov 5 03:52:15 2008 UTC vs.
Revision 1.221 by root, Wed Dec 3 15:23:44 2008 UTC

8 8
9=head2 EXAMPLE PROGRAM 9=head2 EXAMPLE PROGRAM
10 10
11 // a single header file is required 11 // a single header file is required
12 #include <ev.h> 12 #include <ev.h>
13
14 #include <stdio.h> // for puts
13 15
14 // every watcher type has its own typedef'd struct 16 // every watcher type has its own typedef'd struct
15 // with the name ev_TYPE 17 // with the name ev_TYPE
16 ev_io stdin_watcher; 18 ev_io stdin_watcher;
17 ev_timer timeout_watcher; 19 ev_timer timeout_watcher;
41 43
42 int 44 int
43 main (void) 45 main (void)
44 { 46 {
45 // use the default event loop unless you have special needs 47 // use the default event loop unless you have special needs
46 ev_loop *loop = ev_default_loop (0); 48 struct ev_loop *loop = ev_default_loop (0);
47 49
48 // initialise an io watcher, then start it 50 // initialise an io watcher, then start it
49 // this one will watch for stdin to become readable 51 // this one will watch for stdin to become readable
50 ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ); 52 ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ);
51 ev_io_start (loop, &stdin_watcher); 53 ev_io_start (loop, &stdin_watcher);
418starting a watcher (without re-setting it) also usually doesn't cause 420starting a watcher (without re-setting it) also usually doesn't cause
419extra overhead. A fork can both result in spurious notifications as well 421extra overhead. A fork can both result in spurious notifications as well
420as in libev having to destroy and recreate the epoll object, which can 422as in libev having to destroy and recreate the epoll object, which can
421take considerable time and thus should be avoided. 423take considerable time and thus should be avoided.
422 424
423All this means that, in practise, C<EVBACKEND_SELECT> can be as fast or 425All this means that, in practice, C<EVBACKEND_SELECT> can be as fast or
424faster then epoll for maybe up to a hundred file descriptors, depending on 426faster than epoll for maybe up to a hundred file descriptors, depending on
425the usage. So sad. 427the usage. So sad.
426 428
427While nominally embeddable in other event loops, this feature is broken in 429While nominally embeddable in other event loops, this feature is broken in
428all kernel versions tested so far. 430all kernel versions tested so far.
429 431
1419 else 1421 else
1420 { 1422 {
1421 // callback was invoked, but there was some activity, re-arm 1423 // callback was invoked, but there was some activity, re-arm
1422 // the watcher to fire in last_activity + 60, which is 1424 // the watcher to fire in last_activity + 60, which is
1423 // guaranteed to be in the future, so "again" is positive: 1425 // guaranteed to be in the future, so "again" is positive:
1424 w->again = timeout - now; 1426 w->repeat = timeout - now;
1425 ev_timer_again (EV_A_ w); 1427 ev_timer_again (EV_A_ w);
1426 } 1428 }
1427 } 1429 }
1428 1430
1429To summarise the callback: first calculate the real timeout (defined 1431To summarise the callback: first calculate the real timeout (defined
2889 2891
2890 myclass obj; 2892 myclass obj;
2891 ev::io iow; 2893 ev::io iow;
2892 iow.set <myclass, &myclass::io_cb> (&obj); 2894 iow.set <myclass, &myclass::io_cb> (&obj);
2893 2895
2896=item w->set (object *)
2897
2898This is an B<experimental> feature that might go away in a future version.
2899
2900This is a variation of a method callback - leaving out the method to call
2901will default the method to C<operator ()>, which makes it possible to use
2902functor objects without having to manually specify the C<operator ()> all
2903the time. Incidentally, you can then also leave out the template argument
2904list.
2905
2906The C<operator ()> method prototype must be C<void operator ()(watcher &w,
2907int revents)>.
2908
2909See the method-C<set> above for more details.
2910
2911Example: use a functor object as callback.
2912
2913 struct myfunctor
2914 {
2915 void operator() (ev::io &w, int revents)
2916 {
2917 ...
2918 }
2919 }
2920
2921 myfunctor f;
2922
2923 ev::io w;
2924 w.set (&f);
2925
2894=item w->set<function> (void *data = 0) 2926=item w->set<function> (void *data = 0)
2895 2927
2896Also sets a callback, but uses a static method or plain function as 2928Also sets a callback, but uses a static method or plain function as
2897callback. The optional C<data> argument will be stored in the watcher's 2929callback. The optional C<data> argument will be stored in the watcher's
2898C<data> member and is free for you to use. 2930C<data> member and is free for you to use.
2997Tony Arcieri has written a ruby extension that offers access to a subset 3029Tony Arcieri has written a ruby extension that offers access to a subset
2998of the libev API and adds file handle abstractions, asynchronous DNS and 3030of the libev API and adds file handle abstractions, asynchronous DNS and
2999more on top of it. It can be found via gem servers. Its homepage is at 3031more on top of it. It can be found via gem servers. Its homepage is at
3000L<http://rev.rubyforge.org/>. 3032L<http://rev.rubyforge.org/>.
3001 3033
3034Roger Pack reports that using the link order C<-lws2_32 -lmsvcrt-ruby-190>
3035makes rev work even on mingw.
3036
3002=item D 3037=item D
3003 3038
3004Leandro Lucarella has written a D language binding (F<ev.d>) for libev, to 3039Leandro Lucarella has written a D language binding (F<ev.d>) for libev, to
3005be found at L<http://proj.llucax.com.ar/wiki/evd>. 3040be found at L<http://proj.llucax.com.ar/wiki/evd>.
3006 3041
3182keeps libev from including F<config.h>, and it also defines dummy 3217keeps libev from including F<config.h>, and it also defines dummy
3183implementations for some libevent functions (such as logging, which is not 3218implementations for some libevent functions (such as logging, which is not
3184supported). It will also not define any of the structs usually found in 3219supported). It will also not define any of the structs usually found in
3185F<event.h> that are not directly supported by the libev core alone. 3220F<event.h> that are not directly supported by the libev core alone.
3186 3221
3222In stanbdalone mode, libev will still try to automatically deduce the
3223configuration, but has to be more conservative.
3224
3187=item EV_USE_MONOTONIC 3225=item EV_USE_MONOTONIC
3188 3226
3189If defined to be C<1>, libev will try to detect the availability of the 3227If defined to be C<1>, libev will try to detect the availability of the
3190monotonic clock option at both compile time and runtime. Otherwise no use 3228monotonic clock option at both compile time and runtime. Otherwise no
3191of the monotonic clock option will be attempted. If you enable this, you 3229use of the monotonic clock option will be attempted. If you enable this,
3192usually have to link against librt or something similar. Enabling it when 3230you usually have to link against librt or something similar. Enabling it
3193the functionality isn't available is safe, though, although you have 3231when the functionality isn't available is safe, though, although you have
3194to make sure you link against any libraries where the C<clock_gettime> 3232to make sure you link against any libraries where the C<clock_gettime>
3195function is hiding in (often F<-lrt>). 3233function is hiding in (often F<-lrt>). See also C<EV_USE_CLOCK_SYSCALL>.
3196 3234
3197=item EV_USE_REALTIME 3235=item EV_USE_REALTIME
3198 3236
3199If defined to be C<1>, libev will try to detect the availability of the 3237If defined to be C<1>, libev will try to detect the availability of the
3200real-time clock option at compile time (and assume its availability at 3238real-time clock option at compile time (and assume its availability at
3201runtime if successful). Otherwise no use of the real-time clock option will 3239runtime if successful). Otherwise no use of the real-time clock option will
3202be attempted. This effectively replaces C<gettimeofday> by C<clock_get 3240be attempted. This effectively replaces C<gettimeofday> by C<clock_get
3203(CLOCK_REALTIME, ...)> and will not normally affect correctness. See the 3241(CLOCK_REALTIME, ...)> and will not normally affect correctness. See the
3204note about libraries in the description of C<EV_USE_MONOTONIC>, though. 3242note about libraries in the description of C<EV_USE_MONOTONIC>, though.
3205 3243
3244=item EV_USE_CLOCK_SYSCALL
3245
3246If defined to be C<1>, libev will try to use a direct syscall instead
3247of calling the system-provided C<clock_gettime> function. This option
3248exists because on GNU/Linux, C<clock_gettime> is in C<librt>, but C<librt>
3249unconditionally pulls in C<libpthread>, slowing down single-threaded
3250programs needlessly. Using a direct syscall is slightly slower (in
3251theory), because no optimised vdso implementation can be used, but avoids
3252the pthread dependency. Defaults to C<1> on GNU/Linux with glibc 2.x or
3253higher, as it simplifies linking (no need for C<-lrt>).
3254
3206=item EV_USE_NANOSLEEP 3255=item EV_USE_NANOSLEEP
3207 3256
3208If defined to be C<1>, libev will assume that C<nanosleep ()> is available 3257If defined to be C<1>, libev will assume that C<nanosleep ()> is available
3209and will use it for delays. Otherwise it will use C<select ()>. 3258and will use it for delays. Otherwise it will use C<select ()>.
3210 3259
3225 3274
3226=item EV_SELECT_USE_FD_SET 3275=item EV_SELECT_USE_FD_SET
3227 3276
3228If defined to C<1>, then the select backend will use the system C<fd_set> 3277If defined to C<1>, then the select backend will use the system C<fd_set>
3229structure. This is useful if libev doesn't compile due to a missing 3278structure. This is useful if libev doesn't compile due to a missing
3230C<NFDBITS> or C<fd_mask> definition or it mis-guesses the bitset layout on 3279C<NFDBITS> or C<fd_mask> definition or it mis-guesses the bitset layout
3231exotic systems. This usually limits the range of file descriptors to some 3280on exotic systems. This usually limits the range of file descriptors to
3232low limit such as 1024 or might have other limitations (winsocket only 3281some low limit such as 1024 or might have other limitations (winsocket
3233allows 64 sockets). The C<FD_SETSIZE> macro, set before compilation, might 3282only allows 64 sockets). The C<FD_SETSIZE> macro, set before compilation,
3234influence the size of the C<fd_set> used. 3283configures the maximum size of the C<fd_set>.
3235 3284
3236=item EV_SELECT_IS_WINSOCKET 3285=item EV_SELECT_IS_WINSOCKET
3237 3286
3238When defined to C<1>, the select backend will assume that 3287When defined to C<1>, the select backend will assume that
3239select/socket/connect etc. don't understand file descriptors but 3288select/socket/connect etc. don't understand file descriptors but

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines