X-Git-Url: http://git.indexdata.com/?p=irspy-moved-to-github.git;a=blobdiff_plain;f=lib%2FZOOM%2FIRSpy.pm;h=03952fea4021c17f4dcaa2e9b64af659d3b2e11d;hp=d2a1ad0f9b18bad2a18acb6492cabf24af63408a;hb=50e2800e28099aa7355faf7110a3869e5bda0e5f;hpb=0ca7a8e129f95070581059266f665e80214ad7ce diff --git a/lib/ZOOM/IRSpy.pm b/lib/ZOOM/IRSpy.pm index d2a1ad0..03952fe 100644 --- a/lib/ZOOM/IRSpy.pm +++ b/lib/ZOOM/IRSpy.pm @@ -1,4 +1,4 @@ -# $Id: IRSpy.pm,v 1.56 2006-12-21 16:35:11 mike Exp $ +# $Id: IRSpy.pm,v 1.60 2007-02-13 15:02:35 mike Exp $ package ZOOM::IRSpy; @@ -404,7 +404,11 @@ sub check { my $i0 = ZOOM::event(\@conn); $this->log("irspy_event", "ZOOM_event(", scalar(@conn), " connections) = $i0"); - last if $i0 == 0 || $i0 == -3; # no events or no connections + if ($i0 == -3 || $i0 == 0) { + # no connections left, or no events on those that remain + $this->log("irspy", "no events remain"); + last; + } my $conn = $conn[$i0-1]; my $ev = $conn->last_event(); my $evstr = ZOOM::event_str($ev); @@ -415,7 +419,6 @@ sub check { eval { $conn->_check() }; if ($@ && ($ev == ZOOM::Event::RECV_DATA || - $ev == ZOOM::Event::RECV_APDU || $ev == ZOOM::Event::ZEND)) { # An error in, say, a search response, becomes visible to # ZOOM before the Receive Data event is sent and persists @@ -423,7 +426,7 @@ sub check { # each report the same error. So we just ignore errors on # "unimportant" events. ### But this doesn't work for, # say, a Connection Refused, as the only event that shows - # us this error is the End. + # us this error is the ZEND. $conn->log("irspy_event", "ignoring error ", "on event $ev ($evstr): $@"); next; @@ -505,15 +508,22 @@ sub check { $this->log("irspy", "$conn still has ZOOM-C level tasks queued: see below"); $finished = 0; } + my $ev = $conn->peek_event(); + if ($ev != 0 && $ev != ZOOM::Event::ZEND) { + my $evstr = ZOOM::event_str($ev); + $this->log("irspy", "$conn has event $ev ($evstr) waiting"); + $finished = 0; + } if (!$conn->option("rewrote_record")) { $this->log("irspy", "$conn did not rewrite its ZeeRex record"); $finished = 0; } } - # This really shouldn't be necessary, but it's belt and braces + # This really shouldn't be necessary, and in practice it rarely + # helps, but it's belt and braces if (!$finished) { - if (++$nruns < 10) { + if (++$nruns < 3) { $this->log("irspy", "back into main loop, ${nruns}th time"); goto ROUND_AND_ROUND_WE_GO; } else {