… | |
… | |
4531 | =head3 C<kqueue> is buggy |
4531 | =head3 C<kqueue> is buggy |
4532 | |
4532 | |
4533 | The kqueue syscall is broken in all known versions - most versions support |
4533 | The kqueue syscall is broken in all known versions - most versions support |
4534 | only sockets, many support pipes. |
4534 | only sockets, many support pipes. |
4535 | |
4535 | |
4536 | Libev tries to work around this by not using C<kqueue> by default on |
4536 | Libev tries to work around this by not using C<kqueue> by default on this |
4537 | this rotten platform, but of course you can still ask for it when creating |
4537 | rotten platform, but of course you can still ask for it when creating a |
4538 | a loop. |
4538 | loop - embedding a socket-only kqueue loop into a select-based one is |
|
|
4539 | probably going to work well. |
4539 | |
4540 | |
4540 | =head3 C<poll> is buggy |
4541 | =head3 C<poll> is buggy |
4541 | |
4542 | |
4542 | Instead of fixing C<kqueue>, Apple replaced their (working) C<poll> |
4543 | Instead of fixing C<kqueue>, Apple replaced their (working) C<poll> |
4543 | implementation by something calling C<kqueue> internally around the 10.5.6 |
4544 | implementation by something calling C<kqueue> internally around the 10.5.6 |
… | |
… | |
4562 | |
4563 | |
4563 | =head3 C<errno> reentrancy |
4564 | =head3 C<errno> reentrancy |
4564 | |
4565 | |
4565 | The default compile environment on Solaris is unfortunately so |
4566 | The default compile environment on Solaris is unfortunately so |
4566 | thread-unsafe that you can't even use components/libraries compiled |
4567 | thread-unsafe that you can't even use components/libraries compiled |
4567 | without C<-D_REENTRANT> (as long as they use C<errno>), which, of course, |
4568 | without C<-D_REENTRANT> in a threaded program, which, of course, isn't |
4568 | isn't defined by default. |
4569 | defined by default. A valid, if stupid, implementation choice. |
4569 | |
4570 | |
4570 | If you want to use libev in threaded environments you have to make sure |
4571 | If you want to use libev in threaded environments you have to make sure |
4571 | it's compiled with C<_REENTRANT> defined. |
4572 | it's compiled with C<_REENTRANT> defined. |
4572 | |
4573 | |
4573 | =head3 Event port backend |
4574 | =head3 Event port backend |
4574 | |
4575 | |
4575 | The scalable event interface for Solaris is called "event ports". Unfortunately, |
4576 | The scalable event interface for Solaris is called "event |
4576 | this mechanism is very buggy. If you run into high CPU usage, your program |
4577 | ports". Unfortunately, this mechanism is very buggy in all major |
|
|
4578 | releases. If you run into high CPU usage, your program freezes or you get |
4577 | freezes or you get a large number of spurious wakeups, make sure you have |
4579 | a large number of spurious wakeups, make sure you have all the relevant |
4578 | all the relevant and latest kernel patches applied. No, I don't know which |
4580 | and latest kernel patches applied. No, I don't know which ones, but there |
4579 | ones, but there are multiple ones. |
4581 | are multiple ones to apply, and afterwards, event ports actually work |
|
|
4582 | great. |
4580 | |
4583 | |
4581 | If you can't get it to work, you can try running the program by setting |
4584 | If you can't get it to work, you can try running the program by setting |
4582 | the environment variable C<LIBEV_FLAGS=3> to only allow C<poll> and |
4585 | the environment variable C<LIBEV_FLAGS=3> to only allow C<poll> and |
4583 | C<select> backends. |
4586 | C<select> backends. |
4584 | |
4587 | |
4585 | =head2 AIX POLL BUG |
4588 | =head2 AIX POLL BUG |
4586 | |
4589 | |
4587 | AIX unfortunately has a broken C<poll.h> header. Libev works around |
4590 | AIX unfortunately has a broken C<poll.h> header. Libev works around |
4588 | this by trying to avoid the poll backend altogether (i.e. it's not even |
4591 | this by trying to avoid the poll backend altogether (i.e. it's not even |
4589 | compiled in), which normally isn't a big problem as C<select> works fine |
4592 | compiled in), which normally isn't a big problem as C<select> works fine |
4590 | with large bitsets, and AIX is dead anyway. |
4593 | with large bitsets on AIX, and AIX is dead anyway. |
4591 | |
4594 | |
4592 | =head2 WIN32 PLATFORM LIMITATIONS AND WORKAROUNDS |
4595 | =head2 WIN32 PLATFORM LIMITATIONS AND WORKAROUNDS |
4593 | |
4596 | |
4594 | =head3 General issues |
4597 | =head3 General issues |
4595 | |
4598 | |
… | |
… | |
4872 | |
4875 | |
4873 | =over 4 |
4876 | =over 4 |
4874 | |
4877 | |
4875 | =item active |
4878 | =item active |
4876 | |
4879 | |
4877 | A watcher is active as long as it has been started (has been attached to |
4880 | A watcher is active as long as it has been started and not yet stopped. |
4878 | an event loop) but not yet stopped (disassociated from the event loop). |
4881 | See L<WATCHER STATES> for details. |
4879 | |
4882 | |
4880 | =item application |
4883 | =item application |
4881 | |
4884 | |
4882 | In this document, an application is whatever is using libev. |
4885 | In this document, an application is whatever is using libev. |
|
|
4886 | |
|
|
4887 | =item backend |
|
|
4888 | |
|
|
4889 | The part of the code dealing with the operating system interfaces. |
4883 | |
4890 | |
4884 | =item callback |
4891 | =item callback |
4885 | |
4892 | |
4886 | The address of a function that is called when some event has been |
4893 | The address of a function that is called when some event has been |
4887 | detected. Callbacks are being passed the event loop, the watcher that |
4894 | detected. Callbacks are being passed the event loop, the watcher that |
4888 | received the event, and the actual event bitset. |
4895 | received the event, and the actual event bitset. |
4889 | |
4896 | |
4890 | =item callback invocation |
4897 | =item callback/watcher invocation |
4891 | |
4898 | |
4892 | The act of calling the callback associated with a watcher. |
4899 | The act of calling the callback associated with a watcher. |
4893 | |
4900 | |
4894 | =item event |
4901 | =item event |
4895 | |
4902 | |
… | |
… | |
4914 | The model used to describe how an event loop handles and processes |
4921 | The model used to describe how an event loop handles and processes |
4915 | watchers and events. |
4922 | watchers and events. |
4916 | |
4923 | |
4917 | =item pending |
4924 | =item pending |
4918 | |
4925 | |
4919 | A watcher is pending as soon as the corresponding event has been detected, |
4926 | A watcher is pending as soon as the corresponding event has been |
4920 | and stops being pending as soon as the watcher will be invoked or its |
4927 | detected. See L<WATCHER STATES> for details. |
4921 | pending status is explicitly cleared by the application. |
|
|
4922 | |
|
|
4923 | A watcher can be pending, but not active. Stopping a watcher also clears |
|
|
4924 | its pending status. |
|
|
4925 | |
4928 | |
4926 | =item real time |
4929 | =item real time |
4927 | |
4930 | |
4928 | The physical time that is observed. It is apparently strictly monotonic :) |
4931 | The physical time that is observed. It is apparently strictly monotonic :) |
4929 | |
4932 | |
… | |
… | |
4936 | =item watcher |
4939 | =item watcher |
4937 | |
4940 | |
4938 | A data structure that describes interest in certain events. Watchers need |
4941 | A data structure that describes interest in certain events. Watchers need |
4939 | to be started (attached to an event loop) before they can receive events. |
4942 | to be started (attached to an event loop) before they can receive events. |
4940 | |
4943 | |
4941 | =item watcher invocation |
|
|
4942 | |
|
|
4943 | The act of calling the callback associated with a watcher. |
|
|
4944 | |
|
|
4945 | =back |
4944 | =back |
4946 | |
4945 | |
4947 | =head1 AUTHOR |
4946 | =head1 AUTHOR |
4948 | |
4947 | |
4949 | Marc Lehmann <libev@schmorp.de>, with repeated corrections by Mikael Magnusson. |
4948 | Marc Lehmann <libev@schmorp.de>, with repeated corrections by Mikael Magnusson. |