… | |
… | |
7 | use AnyEvent::Util qw(WSAEWOULDBLOCK); |
7 | use AnyEvent::Util qw(WSAEWOULDBLOCK); |
8 | use Scalar::Util (); |
8 | use Scalar::Util (); |
9 | use Carp (); |
9 | use Carp (); |
10 | use Fcntl (); |
10 | use Fcntl (); |
11 | use Errno qw(EAGAIN EINTR); |
11 | use Errno qw(EAGAIN EINTR); |
12 | use Time::HiRes qw(time); |
|
|
13 | |
12 | |
14 | =head1 NAME |
13 | =head1 NAME |
15 | |
14 | |
16 | AnyEvent::Handle - non-blocking I/O on file handles via AnyEvent |
15 | AnyEvent::Handle - non-blocking I/O on file handles via AnyEvent |
17 | |
16 | |
… | |
… | |
228 | # $self->on_eof (delete $self->{on_eof} ) if $self->{on_eof}; # nop |
227 | # $self->on_eof (delete $self->{on_eof} ) if $self->{on_eof}; # nop |
229 | # $self->on_error (delete $self->{on_error}) if $self->{on_error}; # nop |
228 | # $self->on_error (delete $self->{on_error}) if $self->{on_error}; # nop |
230 | # $self->on_read (delete $self->{on_read} ) if $self->{on_read}; # nop |
229 | # $self->on_read (delete $self->{on_read} ) if $self->{on_read}; # nop |
231 | $self->on_drain (delete $self->{on_drain}) if $self->{on_drain}; |
230 | $self->on_drain (delete $self->{on_drain}) if $self->{on_drain}; |
232 | |
231 | |
233 | $self->{_activity} = time; |
232 | $self->{_activity} = AnyEvent->now; |
234 | $self->_timeout; |
233 | $self->_timeout; |
235 | |
234 | |
236 | $self->start_read; |
235 | $self->start_read; |
237 | |
236 | |
238 | $self |
237 | $self |
… | |
… | |
319 | # also check for time-outs |
318 | # also check for time-outs |
320 | sub _timeout { |
319 | sub _timeout { |
321 | my ($self) = @_; |
320 | my ($self) = @_; |
322 | |
321 | |
323 | if ($self->{timeout}) { |
322 | if ($self->{timeout}) { |
324 | my $NOW = time; |
323 | my $NOW = AnyEvent->now; |
325 | |
324 | |
326 | # when would the timeout trigger? |
325 | # when would the timeout trigger? |
327 | my $after = $self->{_activity} + $self->{timeout} - $NOW; |
326 | my $after = $self->{_activity} + $self->{timeout} - $NOW; |
328 | |
|
|
329 | warn "next to in $after\n";#d# |
|
|
330 | |
327 | |
331 | # now or in the past already? |
328 | # now or in the past already? |
332 | if ($after <= 0) { |
329 | if ($after <= 0) { |
333 | $self->{_activity} = $NOW; |
330 | $self->{_activity} = $NOW; |
334 | |
331 | |
… | |
… | |
346 | $after = $self->{timeout}; |
343 | $after = $self->{timeout}; |
347 | } |
344 | } |
348 | |
345 | |
349 | Scalar::Util::weaken $self; |
346 | Scalar::Util::weaken $self; |
350 | |
347 | |
351 | warn "after $after\n";#d# |
|
|
352 | $self->{_tw} ||= AnyEvent->timer (after => $after, cb => sub { |
348 | $self->{_tw} ||= AnyEvent->timer (after => $after, cb => sub { |
353 | delete $self->{_tw}; |
349 | delete $self->{_tw}; |
354 | $self->_timeout; |
350 | $self->_timeout; |
355 | }); |
351 | }); |
356 | } else { |
352 | } else { |
… | |
… | |
410 | my $len = syswrite $self->{fh}, $self->{wbuf}; |
406 | my $len = syswrite $self->{fh}, $self->{wbuf}; |
411 | |
407 | |
412 | if ($len >= 0) { |
408 | if ($len >= 0) { |
413 | substr $self->{wbuf}, 0, $len, ""; |
409 | substr $self->{wbuf}, 0, $len, ""; |
414 | |
410 | |
415 | $self->{_activity} = time; |
411 | $self->{_activity} = AnyEvent->now; |
416 | |
412 | |
417 | $self->{on_drain}($self) |
413 | $self->{on_drain}($self) |
418 | if $self->{low_water_mark} >= length $self->{wbuf} |
414 | if $self->{low_water_mark} >= length $self->{wbuf} |
419 | && $self->{on_drain}; |
415 | && $self->{on_drain}; |
420 | |
416 | |
… | |
… | |
1056 | $self->{_rw} = AnyEvent->io (fh => $self->{fh}, poll => "r", cb => sub { |
1052 | $self->{_rw} = AnyEvent->io (fh => $self->{fh}, poll => "r", cb => sub { |
1057 | my $rbuf = $self->{filter_r} ? \my $buf : \$self->{rbuf}; |
1053 | my $rbuf = $self->{filter_r} ? \my $buf : \$self->{rbuf}; |
1058 | my $len = sysread $self->{fh}, $$rbuf, $self->{read_size} || 8192, length $$rbuf; |
1054 | my $len = sysread $self->{fh}, $$rbuf, $self->{read_size} || 8192, length $$rbuf; |
1059 | |
1055 | |
1060 | if ($len > 0) { |
1056 | if ($len > 0) { |
1061 | $self->{_activity} = time; |
1057 | $self->{_activity} = AnyEvent->now; |
1062 | |
1058 | |
1063 | $self->{filter_r} |
1059 | $self->{filter_r} |
1064 | ? $self->{filter_r}->($self, $rbuf) |
1060 | ? $self->{filter_r}->($self, $rbuf) |
1065 | : $self->_drain_rbuf; |
1061 | : $self->_drain_rbuf; |
1066 | |
1062 | |