Acme-Sort-Sleep
view release on metacpan or search on metacpan
local/lib/perl5/IO/Async/Loop/Select.pm view on Meta::CPAN
# Since we have no way to know if the timeout occured, we'll have to
# attempt to fire any waiting timeout events anyway
$self->_manage_queues;
alarm( 0 ) if WATCHDOG_ENABLE;
}
=head2 loop_once
$count = $loop->loop_once( $timeout )
This method calls the C<pre_select> method to prepare the bitvectors for a
C<select> syscall, performs it, then calls C<post_select> to process the
result. It returns the total number of callbacks invoked by the
C<post_select> method, or C<undef> if the underlying C<select(2)> syscall
returned an error.
=cut
sub loop_once
{
my $self = shift;
my ( $timeout ) = @_;
my ( $rvec, $wvec, $evec ) = ('') x 3;
$self->pre_select( \$rvec, \$wvec, \$evec, \$timeout );
my $ret = select( $rvec, $wvec, $evec, $timeout );
if( $ret < 0 ) {
# r/w/e vec can't be trusted
$rvec = $wvec = $evec = '';
}
{
local $!;
$self->post_select( $rvec, $wvec, $evec );
}
return $ret;
}
sub watch_io
{
my $self = shift;
my %params = @_;
$self->__watch_io( %params );
my $fileno = $params{handle}->fileno;
vec( $self->{rvec}, $fileno, 1 ) = 1 if $params{on_read_ready};
vec( $self->{wvec}, $fileno, 1 ) = 1 if $params{on_write_ready};
# MSWin32 does not indicate writeready for connect() errors, HUPs, etc
# but it does indicate exceptional
vec( $self->{evec}, $fileno, 1 ) = 1 if SELECT_CONNECT_EVEC and $params{on_write_ready};
vec( $self->{avec}, $fileno, 1 ) = 1 if FAKE_ISREG_READY and stat( $params{handle} ) and -f _;
}
sub unwatch_io
{
my $self = shift;
my %params = @_;
$self->__unwatch_io( %params );
my $fileno = $params{handle}->fileno;
vec( $self->{rvec}, $fileno, 1 ) = 0 if $params{on_read_ready};
vec( $self->{wvec}, $fileno, 1 ) = 0 if $params{on_write_ready};
vec( $self->{evec}, $fileno, 1 ) = 0 if SELECT_CONNECT_EVEC and $params{on_write_ready};
vec( $self->{avec}, $fileno, 1 ) = 0 if FAKE_ISREG_READY and stat( $params{handle} ) and -f _;
# vec will grow a bit vector as needed, but never shrink it. We'll trim
# trailing null bytes
$_ =~s/\0+\z// for $self->{rvec}, $self->{wvec}, $self->{evec}, $self->{avec};
}
=head1 SEE ALSO
=over 4
=item *
L<IO::Select> - OO interface to select system call
=back
=head1 AUTHOR
Paul Evans <leonerd@leonerd.org.uk>
=cut
0x55AA;
( run in 2.335 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )