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

Comparing libev/ev.pod (file contents):
Revision 1.303 by root, Thu Oct 14 04:29:34 2010 UTC vs.
Revision 1.308 by root, Thu Oct 21 02:46:59 2010 UTC

439of course I<doesn't>, and epoll just loves to report events for totally 439of course I<doesn't>, and epoll just loves to report events for totally
440I<different> file descriptors (even already closed ones, so one cannot 440I<different> file descriptors (even already closed ones, so one cannot
441even remove them from the set) than registered in the set (especially 441even remove them from the set) than registered in the set (especially
442on SMP systems). Libev tries to counter these spurious notifications by 442on SMP systems). Libev tries to counter these spurious notifications by
443employing an additional generation counter and comparing that against the 443employing an additional generation counter and comparing that against the
444events to filter out spurious ones, recreating the set when required. 444events to filter out spurious ones, recreating the set when required. Last
445not least, it also refuses to work with some file descriptors which work
446perfectly fine with C<select> (files, many character devices...).
445 447
446While stopping, setting and starting an I/O watcher in the same iteration 448While stopping, setting and starting an I/O watcher in the same iteration
447will result in some caching, there is still a system call per such 449will result in some caching, there is still a system call per such
448incident (because the same I<file descriptor> could point to a different 450incident (because the same I<file descriptor> could point to a different
449I<file description> now), so its best to avoid that. Also, C<dup ()>'ed 451I<file description> now), so its best to avoid that. Also, C<dup ()>'ed
3389Associates a different C<struct ev_loop> with this watcher. You can only 3391Associates a different C<struct ev_loop> with this watcher. You can only
3390do this when the watcher is inactive (and not pending either). 3392do this when the watcher is inactive (and not pending either).
3391 3393
3392=item w->set ([arguments]) 3394=item w->set ([arguments])
3393 3395
3394Basically the same as C<ev_TYPE_set>, with the same arguments. Must be 3396Basically the same as C<ev_TYPE_set>, with the same arguments. Either this
3395called at least once. Unlike the C counterpart, an active watcher gets 3397method or a suitable start method must be called at least once. Unlike the
3396automatically stopped and restarted when reconfiguring it with this 3398C counterpart, an active watcher gets automatically stopped and restarted
3397method. 3399when reconfiguring it with this method.
3398 3400
3399=item w->start () 3401=item w->start ()
3400 3402
3401Starts the watcher. Note that there is no C<loop> argument, as the 3403Starts the watcher. Note that there is no C<loop> argument, as the
3402constructor already stores the event loop. 3404constructor already stores the event loop.
3403 3405
3406=item w->start ([arguments])
3407
3408Instead of calling C<set> and C<start> methods separately, it is often
3409convenient to wrap them in one call. Uses the same type of arguments as
3410the configure C<set> method of the watcher.
3411
3404=item w->stop () 3412=item w->stop ()
3405 3413
3406Stops the watcher if it is active. Again, no C<loop> argument. 3414Stops the watcher if it is active. Again, no C<loop> argument.
3407 3415
3408=item w->again () (C<ev::timer>, C<ev::periodic> only) 3416=item w->again () (C<ev::timer>, C<ev::periodic> only)
3420 3428
3421=back 3429=back
3422 3430
3423=back 3431=back
3424 3432
3425Example: Define a class with an IO and idle watcher, start one of them in 3433Example: Define a class with two I/O and idle watchers, start the I/O
3426the constructor. 3434watchers in the constructor.
3427 3435
3428 class myclass 3436 class myclass
3429 { 3437 {
3430 ev::io io ; void io_cb (ev::io &w, int revents); 3438 ev::io io ; void io_cb (ev::io &w, int revents);
3439 ev::io2 io2 ; void io2_cb (ev::io &w, int revents);
3431 ev::idle idle; void idle_cb (ev::idle &w, int revents); 3440 ev::idle idle; void idle_cb (ev::idle &w, int revents);
3432 3441
3433 myclass (int fd) 3442 myclass (int fd)
3434 { 3443 {
3435 io .set <myclass, &myclass::io_cb > (this); 3444 io .set <myclass, &myclass::io_cb > (this);
3445 io2 .set <myclass, &myclass::io2_cb > (this);
3436 idle.set <myclass, &myclass::idle_cb> (this); 3446 idle.set <myclass, &myclass::idle_cb> (this);
3437 3447
3438 io.start (fd, ev::READ); 3448 io.set (fd, ev::WRITE); // configure the watcher
3449 io.start (); // start it whenever convenient
3450
3451 io2.start (fd, ev::READ); // set + start in one call
3439 } 3452 }
3440 }; 3453 };
3441 3454
3442 3455
3443=head1 OTHER LANGUAGE BINDINGS 3456=head1 OTHER LANGUAGE BINDINGS
4423=head3 C<kqueue> is buggy 4436=head3 C<kqueue> is buggy
4424 4437
4425The kqueue syscall is broken in all known versions - most versions support 4438The kqueue syscall is broken in all known versions - most versions support
4426only sockets, many support pipes. 4439only sockets, many support pipes.
4427 4440
4441Libev tries to work around this by not using C<kqueue> by default on
4442this rotten platform, but of course you can still ask for it when creating
4443a loop.
4444
4428=head3 C<poll> is buggy 4445=head3 C<poll> is buggy
4429 4446
4430Instead of fixing C<kqueue>, Apple replaced their (working) C<poll> 4447Instead of fixing C<kqueue>, Apple replaced their (working) C<poll>
4431implementation by something calling C<kqueue> internally around the 10.5.6 4448implementation by something calling C<kqueue> internally around the 10.5.6
4432release, so now C<kqueue> I<and> C<poll> are broken. 4449release, so now C<kqueue> I<and> C<poll> are broken.
4433 4450
4434Libev tries to work around this by neither using C<kqueue> nor C<poll> by 4451Libev tries to work around this by not using C<poll> by default on
4435default on this rotten platform, but of course you cna still ask for them 4452this rotten platform, but of course you can still ask for it when creating
4436when creating a loop. 4453a loop.
4437 4454
4438=head3 C<select> is buggy 4455=head3 C<select> is buggy
4439 4456
4440All that's left is C<select>, and of course Apple found a way to fuck this 4457All that's left is C<select>, and of course Apple found a way to fuck this
4441one up as well: On OS/X, C<select> actively limits the number of file 4458one up as well: On OS/X, C<select> actively limits the number of file
4442descriptors you can pass in to 1024 - your program suddenyl crashes when 4459descriptors you can pass in to 1024 - your program suddenly crashes when
4443you use more. 4460you use more.
4444 4461
4445There is an undocumented "workaround" for this - defining 4462There is an undocumented "workaround" for this - defining
4446C<_DARWIN_UNLIMITED_SELECT>, which libev tries to use, so select I<should> 4463C<_DARWIN_UNLIMITED_SELECT>, which libev tries to use, so select I<should>
4447work on OS/X. 4464work on OS/X.
4464this mechanism is very buggy. If you run into high CPU usage, your program 4481this mechanism is very buggy. If you run into high CPU usage, your program
4465freezes or you get a large number of spurious wakeups, make sure you have 4482freezes or you get a large number of spurious wakeups, make sure you have
4466all the relevant and latest kernel patches applied. No, I don't know which 4483all the relevant and latest kernel patches applied. No, I don't know which
4467ones, but there are multiple ones. 4484ones, but there are multiple ones.
4468 4485
4469If you can't get it to work, you can try running the program with 4486If you can't get it to work, you can try running the program by setting
4470C<LIBEV_FLAGS=3> to only allow C<poll> and C<select> backends. 4487the environment variable C<LIBEV_FLAGS=3> to only allow C<poll> and
4488C<select> backends.
4471 4489
4472=head2 AIX POLL BUG 4490=head2 AIX POLL BUG
4473 4491
4474AIX unfortunately has a broken C<poll.h> header. Libev works around 4492AIX unfortunately has a broken C<poll.h> header. Libev works around
4475this by trying to avoid the poll backend altogether (i.e. it's not even 4493this by trying to avoid the poll backend altogether (i.e. it's not even
4619watchers. 4637watchers.
4620 4638
4621=item C<double> must hold a time value in seconds with enough accuracy 4639=item C<double> must hold a time value in seconds with enough accuracy
4622 4640
4623The type C<double> is used to represent timestamps. It is required to 4641The type C<double> is used to represent timestamps. It is required to
4624have at least 51 bits of mantissa (and 9 bits of exponent), which is good 4642have at least 51 bits of mantissa (and 9 bits of exponent), which is
4625enough for at least into the year 4000. This requirement is fulfilled by 4643good enough for at least into the year 4000 with millisecond accuracy
4644(the design goal for libev). This requirement is overfulfilled by
4626implementations implementing IEEE 754, which is basically all existing 4645implementations using IEEE 754, which is basically all existing ones. With
4627ones. With IEEE 754 doubles, you get microsecond accuracy until at least 4646IEEE 754 doubles, you get microsecond accuracy until at least 2200.
46282200.
4629 4647
4630=back 4648=back
4631 4649
4632If you know of other additional requirements drop me a note. 4650If you know of other additional requirements drop me a note.
4633 4651

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines