… | |
… | |
480 | unblocking the signals. |
480 | unblocking the signals. |
481 | |
481 | |
482 | It's also required by POSIX in a threaded program, as libev calls |
482 | It's also required by POSIX in a threaded program, as libev calls |
483 | C<sigprocmask>, whose behaviour is officially unspecified. |
483 | C<sigprocmask>, whose behaviour is officially unspecified. |
484 | |
484 | |
485 | This flag's behaviour will become the default in future versions of libev. |
485 | =item C<EVFLAG_NOTIMERFD> |
|
|
486 | |
|
|
487 | When this flag is specified, the libev will avoid using a C<timerfd> to |
|
|
488 | detect time jumps. It will still be able to detect time jumps, but takes |
|
|
489 | longer and has a lower accuracy in doing so, but saves a file descriptor |
|
|
490 | per loop. |
|
|
491 | |
|
|
492 | The current implementation only tries to use a C<timerfd> when the first |
|
|
493 | C<ev_periodic> watcher is started and falls back on other methods if it |
|
|
494 | cannot be created, but this behaviour might change in the future. |
486 | |
495 | |
487 | =item C<EVBACKEND_SELECT> (value 1, portable select backend) |
496 | =item C<EVBACKEND_SELECT> (value 1, portable select backend) |
488 | |
497 | |
489 | This is your standard select(2) backend. Not I<completely> standard, as |
498 | This is your standard select(2) backend. Not I<completely> standard, as |
490 | libev tries to roll its own fd_set with no limits on the number of fds, |
499 | libev tries to roll its own fd_set with no limits on the number of fds, |
… | |
… | |
1535 | |
1544 | |
1536 | Many event loops support I<watcher priorities>, which are usually small |
1545 | Many event loops support I<watcher priorities>, which are usually small |
1537 | integers that influence the ordering of event callback invocation |
1546 | integers that influence the ordering of event callback invocation |
1538 | between watchers in some way, all else being equal. |
1547 | between watchers in some way, all else being equal. |
1539 | |
1548 | |
1540 | In libev, Watcher priorities can be set using C<ev_set_priority>. See its |
1549 | In libev, watcher priorities can be set using C<ev_set_priority>. See its |
1541 | description for the more technical details such as the actual priority |
1550 | description for the more technical details such as the actual priority |
1542 | range. |
1551 | range. |
1543 | |
1552 | |
1544 | There are two common ways how these these priorities are being interpreted |
1553 | There are two common ways how these these priorities are being interpreted |
1545 | by event loops: |
1554 | by event loops: |
… | |
… | |
1749 | when you rarely read from a file instead of from a socket, and want to |
1758 | when you rarely read from a file instead of from a socket, and want to |
1750 | reuse the same code path. |
1759 | reuse the same code path. |
1751 | |
1760 | |
1752 | =head3 The special problem of fork |
1761 | =head3 The special problem of fork |
1753 | |
1762 | |
1754 | Some backends (epoll, kqueue, probably linuxaio) do not support C<fork ()> |
1763 | Some backends (epoll, kqueue, linuxaio, iouring) do not support C<fork ()> |
1755 | at all or exhibit useless behaviour. Libev fully supports fork, but needs |
1764 | at all or exhibit useless behaviour. Libev fully supports fork, but needs |
1756 | to be told about it in the child if you want to continue to use it in the |
1765 | to be told about it in the child if you want to continue to use it in the |
1757 | child. |
1766 | child. |
1758 | |
1767 | |
1759 | To support fork in your child processes, you have to call C<ev_loop_fork |
1768 | To support fork in your child processes, you have to call C<ev_loop_fork |
… | |
… | |
4484 | |
4493 | |
4485 | ev_select.c only when select backend is enabled |
4494 | ev_select.c only when select backend is enabled |
4486 | ev_poll.c only when poll backend is enabled |
4495 | ev_poll.c only when poll backend is enabled |
4487 | ev_epoll.c only when the epoll backend is enabled |
4496 | ev_epoll.c only when the epoll backend is enabled |
4488 | ev_linuxaio.c only when the linux aio backend is enabled |
4497 | ev_linuxaio.c only when the linux aio backend is enabled |
|
|
4498 | ev_iouring.c only when the linux io_uring backend is enabled |
4489 | ev_kqueue.c only when the kqueue backend is enabled |
4499 | ev_kqueue.c only when the kqueue backend is enabled |
4490 | ev_port.c only when the solaris port backend is enabled |
4500 | ev_port.c only when the solaris port backend is enabled |
4491 | |
4501 | |
4492 | F<ev.c> includes the backend files directly when enabled, so you only need |
4502 | F<ev.c> includes the backend files directly when enabled, so you only need |
4493 | to compile this single file. |
4503 | to compile this single file. |
… | |
… | |
4614 | available and will probe for kernel support at runtime. This will improve |
4624 | available and will probe for kernel support at runtime. This will improve |
4615 | C<ev_signal> and C<ev_async> performance and reduce resource consumption. |
4625 | C<ev_signal> and C<ev_async> performance and reduce resource consumption. |
4616 | If undefined, it will be enabled if the headers indicate GNU/Linux + Glibc |
4626 | If undefined, it will be enabled if the headers indicate GNU/Linux + Glibc |
4617 | 2.7 or newer, otherwise disabled. |
4627 | 2.7 or newer, otherwise disabled. |
4618 | |
4628 | |
|
|
4629 | =item EV_USE_SIGNALFD |
|
|
4630 | |
|
|
4631 | If defined to be C<1>, then libev will assume that C<signalfd ()> is |
|
|
4632 | available and will probe for kernel support at runtime. This enables |
|
|
4633 | the use of EVFLAG_SIGNALFD for faster and simpler signal handling. If |
|
|
4634 | undefined, it will be enabled if the headers indicate GNU/Linux + Glibc |
|
|
4635 | 2.7 or newer, otherwise disabled. |
|
|
4636 | |
|
|
4637 | =item EV_USE_TIMERFD |
|
|
4638 | |
|
|
4639 | If defined to be C<1>, then libev will assume that C<timerfd ()> is |
|
|
4640 | available and will probe for kernel support at runtime. This allows |
|
|
4641 | libev to detect time jumps accurately. If undefined, it will be enabled |
|
|
4642 | if the headers indicate GNU/Linux + Glibc 2.8 or newer and define |
|
|
4643 | C<TFD_TIMER_CANCEL_ON_SET>, otherwise disabled. |
|
|
4644 | |
|
|
4645 | =item EV_USE_EVENTFD |
|
|
4646 | |
|
|
4647 | If defined to be C<1>, then libev will assume that C<eventfd ()> is |
|
|
4648 | available and will probe for kernel support at runtime. This will improve |
|
|
4649 | C<ev_signal> and C<ev_async> performance and reduce resource consumption. |
|
|
4650 | If undefined, it will be enabled if the headers indicate GNU/Linux + Glibc |
|
|
4651 | 2.7 or newer, otherwise disabled. |
|
|
4652 | |
4619 | =item EV_USE_SELECT |
4653 | =item EV_USE_SELECT |
4620 | |
4654 | |
4621 | If undefined or defined to be C<1>, libev will compile in support for the |
4655 | If undefined or defined to be C<1>, libev will compile in support for the |
4622 | C<select>(2) backend. No attempt at auto-detection will be done: if no |
4656 | C<select>(2) backend. No attempt at auto-detection will be done: if no |
4623 | other method takes over, select will be it. Otherwise the select backend |
4657 | other method takes over, select will be it. Otherwise the select backend |
… | |
… | |
4686 | backend for GNU/Linux systems. If undefined, it will be enabled if the |
4720 | backend for GNU/Linux systems. If undefined, it will be enabled if the |
4687 | headers indicate GNU/Linux + Glibc 2.4 or newer, otherwise disabled. |
4721 | headers indicate GNU/Linux + Glibc 2.4 or newer, otherwise disabled. |
4688 | |
4722 | |
4689 | =item EV_USE_LINUXAIO |
4723 | =item EV_USE_LINUXAIO |
4690 | |
4724 | |
|
|
4725 | If defined to be C<1>, libev will compile in support for the Linux aio |
|
|
4726 | backend (C<EV_USE_EPOLL> must also be enabled). If undefined, it will be |
|
|
4727 | enabled on linux, otherwise disabled. |
|
|
4728 | |
|
|
4729 | =item EV_USE_IOURING |
|
|
4730 | |
4691 | If defined to be C<1>, libev will compile in support for the Linux |
4731 | If defined to be C<1>, libev will compile in support for the Linux |
4692 | aio backend. Due to it's currenbt limitations it has to be requested |
4732 | io_uring backend (C<EV_USE_EPOLL> must also be enabled). Due to it's |
4693 | explicitly. If undefined, it will be enabled on linux, otherwise |
4733 | current limitations it has to be requested explicitly. If undefined, it |
4694 | disabled. |
4734 | will be enabled on linux, otherwise disabled. |
4695 | |
4735 | |
4696 | =item EV_USE_KQUEUE |
4736 | =item EV_USE_KQUEUE |
4697 | |
4737 | |
4698 | If defined to be C<1>, libev will compile in support for the BSD style |
4738 | If defined to be C<1>, libev will compile in support for the BSD style |
4699 | C<kqueue>(2) backend. Its actual availability will be detected at runtime, |
4739 | C<kqueue>(2) backend. Its actual availability will be detected at runtime, |