improve it the arc diddle a bit more
[spider.git] / perl / DXProt.pm
index 056402b9501257fc410ba747e72bfb3e49949e9b..f8a13407cec649ff03b2b2eea508d98e462cc898 100644 (file)
@@ -1039,19 +1039,27 @@ sub normal
                                                                $dxchan->send($dxchan->msg('pingi', $from, $s, $ave))
                                                        } elsif ($dxchan->is_node) {
                                                                if ($tochan) {
-                                                                       $tochan->{nopings} = $tochan->user->nopings || 2; # pump up the timer
+                                                                       my $nopings = $tochan->user->nopings || 2;
                                                                        push @{$tochan->{pingtime}}, $t;
                                                                        shift @{$tochan->{pingtime}} if @{$tochan->{pingtime}} > 6;
-                                                                       my $st;
-                                                                       for (@{$tochan->{pingtime}}) {
-                                                                               $st += $_;
+
+                                                                       # cope with a missed ping, this means you must set the pingint large enough
+                                                                       if ($tochan->is_arcluster && $t > $tochan->{pingint}  && $t < 2 * $tochan->{pingint} ) {
+                                                                               $t -= $tochan->{pingint};
                                                                        }
+
+                                                                       # calc smoothed RTT a la TCP
                                                                        if (@{$tochan->{pingtime}} == 1) {
                                                                                $tochan->{pingave} = $t;
                                                                        } else {
                                                                                $tochan->{pingave} = $tochan->{pingave} + (($t - $tochan->{pingave}) / 8);
                                                                        }
+#                                                                      my $st;
+#                                                                      for (@{$tochan->{pingtime}}) {
+#                                                                              $st += $_;
+#                                                                      }
 #                                                                      $tochan->{pingave} = $st / @{$tochan->{pingtime}};
+                                                                       $tochan->{nopings} = $nopings; # pump up the timer
                                                                }
                                                        } 
                                                }