POE
view release on metacpan or search on metacpan
lib/POE/Driver/SysRW.pm view on Meta::CPAN
$! = 0 if defined $wrote_count;
unless ($wrote_count) {
$! = 0 if $! == EAGAIN or $! == EWOULDBLOCK;
last;
}
$self->[CURRENT_OCTETS_DONE] += $wrote_count;
$self->[TOTAL_OCTETS_LEFT] -= $wrote_count;
unless ($self->[CURRENT_OCTETS_LEFT] -= $wrote_count) {
shift(@{$self->[OUTPUT_QUEUE]});
if (@{$self->[OUTPUT_QUEUE]}) {
$self->[CURRENT_OCTETS_DONE] = 0;
$self->[CURRENT_OCTETS_LEFT] = length($self->[OUTPUT_QUEUE]->[0]);
}
else {
$self->[CURRENT_OCTETS_DONE] = $self->[CURRENT_OCTETS_LEFT] = 0;
}
}
}
$self->[TOTAL_OCTETS_LEFT];
}
#------------------------------------------------------------------------------
sub get_out_messages_buffered {
scalar(@{$_[0]->[OUTPUT_QUEUE]});
}
1;
__END__
=head1 NAME
POE::Driver::SysRW - buffered, non-blocking I/O using sysread and syswrite
=head1 SYNOPSIS
L<POE::Driver/SYNOPSIS> illustrates how the interface works. This
module is merely one implementation.
=head1 DESCRIPTION
This driver implements L<POE::Driver> using sysread and syswrite.
=head1 PUBLIC METHODS
POE::Driver::SysRW introduces some additional features not covered in
the base interface.
=head2 new [BlockSize => OCTETS]
new() creates a new buffered I/O driver that uses sysread() to read
data from a handle and syswrite() to flush data to that handle. The
constructor accepts one optional named parameter, C<BlockSize>, which
indicates the maximum number of OCTETS that will be read at one time.
C<BlockSize> is 64 kilobytes (65536 octets) by default. Higher values
may improve performance in streaming applications, but the trade-off
is a lower event granularity and increased resident memory usage.
Lower C<BlockSize> values reduce memory consumption somewhat with
corresponding throughput penalties.
my $driver = POE::Driver::SysRW->new;
my $driver = POE::Driver::SysRW->new( BlockSize => $block_size );
Drivers are commonly instantiated within POE::Wheel constructor calls:
$_[HEAP]{wheel} = POE::Wheel::ReadWrite->new(
InputHandle => \*STDIN,
OutputHandle => \*STDOUT,
Driver => POE::Driver::SysRW->new(),
Filter => POE::Filter::Line->new(),
);
Applications almost always use POE::Driver::SysRW, so POE::Wheel
objects almost always will create their own if no Driver is specified.
=head2 All Other Methods
POE::Driver::SysRW documents the abstract interface documented in
POE::Driver. Please see L<POE::Driver> for more details about the
following methods:
=over 4
=item flush
=item get
=item get_out_messages_buffered
=item put
=back
=head1 SEE ALSO
L<POE::Driver>, L<POE::Wheel>.
Also see the SEE ALSO section of L<POE>, which contains a brief
roadmap of POE's documentation.
=head1 AUTHORS & COPYRIGHTS
Please see L<POE> for more information about authors and contributors.
=cut
# rocco // vim: ts=2 sw=2 expandtab
# TODO - Edit.
( run in 0.554 second using v1.01-cache-2.11-cpan-f56aa216473 )