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

Comparing libev/ev.pod (file contents):
Revision 1.304 by root, Thu Oct 14 04:30:46 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
4441 4454
4442=head3 C<select> is buggy 4455=head3 C<select> is buggy
4443 4456
4444All 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
4445one 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
4446descriptors you can pass in to 1024 - your program suddenyl crashes when 4459descriptors you can pass in to 1024 - your program suddenly crashes when
4447you use more. 4460you use more.
4448 4461
4449There is an undocumented "workaround" for this - defining 4462There is an undocumented "workaround" for this - defining
4450C<_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>
4451work on OS/X. 4464work on OS/X.
4468this 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
4469freezes 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
4470all 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
4471ones, but there are multiple ones. 4484ones, but there are multiple ones.
4472 4485
4473If 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
4474C<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.
4475 4489
4476=head2 AIX POLL BUG 4490=head2 AIX POLL BUG
4477 4491
4478AIX unfortunately has a broken C<poll.h> header. Libev works around 4492AIX unfortunately has a broken C<poll.h> header. Libev works around
4479this 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
4623watchers. 4637watchers.
4624 4638
4625=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
4626 4640
4627The 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
4628have 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
4629enough 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
4630implementations implementing IEEE 754, which is basically all existing 4645implementations using IEEE 754, which is basically all existing ones. With
4631ones. With IEEE 754 doubles, you get microsecond accuracy until at least 4646IEEE 754 doubles, you get microsecond accuracy until at least 2200.
46322200.
4633 4647
4634=back 4648=back
4635 4649
4636If you know of other additional requirements drop me a note. 4650If you know of other additional requirements drop me a note.
4637 4651

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines