… | |
… | |
362 | =cut |
362 | =cut |
363 | |
363 | |
364 | sub _drain_rbuf { |
364 | sub _drain_rbuf { |
365 | my ($self) = @_; |
365 | my ($self) = @_; |
366 | |
366 | |
367 | return if exists $self->{in_drain}; |
367 | return if $self->{in_drain}; |
368 | local $self->{in_drain} = 1; |
368 | local $self->{in_drain} = 1; |
369 | |
369 | |
370 | while (my $len = length $self->{rbuf}) { |
370 | while (my $len = length $self->{rbuf}) { |
371 | no strict 'refs'; |
371 | no strict 'refs'; |
372 | if (my $cb = shift @{ $self->{queue} }) { |
372 | if (my $cb = shift @{ $self->{queue} }) { |
… | |
… | |
485 | sub _read_chunk($$) { |
485 | sub _read_chunk($$) { |
486 | my ($self, $len, $cb) = @_; |
486 | my ($self, $len, $cb) = @_; |
487 | |
487 | |
488 | sub { |
488 | sub { |
489 | $len <= length $_[0]{rbuf} or return; |
489 | $len <= length $_[0]{rbuf} or return; |
490 | $cb->($self, $_[0], substr $_[0]{rbuf}, 0, $len, ""); |
490 | $cb->($_[0], substr $_[0]{rbuf}, 0, $len, ""); |
491 | 1 |
491 | 1 |
492 | } |
492 | } |
493 | } |
493 | } |
494 | |
494 | |
495 | sub push_read_chunk { |
495 | sub push_read_chunk { |
… | |
… | |
537 | $eol = qr|^(.*?)($eol)|; |
537 | $eol = qr|^(.*?)($eol)|; |
538 | |
538 | |
539 | sub { |
539 | sub { |
540 | $_[0]{rbuf} =~ s/$eol// or return; |
540 | $_[0]{rbuf} =~ s/$eol// or return; |
541 | |
541 | |
542 | $cb->($self, $1, $2); |
542 | $cb->($_[0], $1, $2); |
543 | 1 |
543 | 1 |
544 | } |
544 | } |
545 | } |
545 | } |
546 | |
546 | |
547 | sub push_read_line { |
547 | sub push_read_line { |
… | |
… | |
577 | |
577 | |
578 | $self->{rw} = AnyEvent->io (fh => $self->{fh}, poll => "r", cb => sub { |
578 | $self->{rw} = AnyEvent->io (fh => $self->{fh}, poll => "r", cb => sub { |
579 | my $len = sysread $self->{fh}, $self->{rbuf}, $self->{read_size} || 8192, length $self->{rbuf}; |
579 | my $len = sysread $self->{fh}, $self->{rbuf}, $self->{read_size} || 8192, length $self->{rbuf}; |
580 | |
580 | |
581 | if ($len > 0) { |
581 | if ($len > 0) { |
582 | if (exists $self->{rbuf_max}) { |
582 | if (defined $self->{rbuf_max}) { |
583 | if ($self->{rbuf_max} < length $self->{rbuf}) { |
583 | if ($self->{rbuf_max} < length $self->{rbuf}) { |
584 | $! = &Errno::ENOSPC; return $self->error; |
584 | $! = &Errno::ENOSPC; return $self->error; |
585 | } |
585 | } |
586 | } |
586 | } |
587 | |
587 | |