NAME
    IO::Async::Loop::Ppoll - use "IO::Async" with ppoll(2)

SYNOPSIS
     use IO::Async::Loop::Ppoll;

     my $loop = IO::Async::Loop::Ppoll->new();

     $loop->add( ... );

     $loop->add( IO::Async::Signal->new(
           name =< 'HUP',
           on_receipt => sub { ... },
     ) );

     $loop->loop_forever();

DESCRIPTION
    This subclass of "IO::Async::Loop::Poll" uses an "IO::Ppoll" object
    instead of a "IO::Poll" to perform read-ready and write-ready tests so
    that they can be mixed with signal handling.

    The "ppoll()" system call atomically switches the process's signal mask,
    performs a wait exactly as "poll()" would, then switches it back. This
    allows a process to block the signals it cares about, but switch in an
    empty signal mask during the poll, allowing it to handle file IO and
    signals concurrently.

CONSTRUCTOR
  $loop = IO::Async::Loop::Ppoll->new( %args )
    This function returns a new instance of a "IO::Async::Loop::Ppoll"
    object. It takes the following named arguments:

    "poll"  The "IO::Ppoll" object to use for notification. Optional; if a
            value is not given, a new "IO::Ppoll" object will be
            constructed.

METHODS
    As this is a subclass of IO::Async::Loop::Poll, all of its methods are
    inherited. Expect where noted below, all of the class's methods behave
    identically to "IO::Async::Loop::Poll".

  $count = $loop->loop_once( $timeout )
    This method calls the "poll()" method on the stored "IO::Ppoll" object,
    passing in the value of $timeout, and processes the results of that
    call. It returns the total number of "IO::Async::Notifier" callbacks
    invoked, or "undef" if the underlying "poll()" method returned an error.
    If the "poll()" was interrupted by a signal, then 0 is returned instead.

SEE ALSO
    *   IO::Ppoll - Object interface to Linux's "ppoll()" call

    *   IO::Async::Loop::Poll - a set using an "IO::Poll" object

AUTHOR
    Paul Evans <leonerd@leonerd.org.uk>