X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2Fbin%2Ffreeside-selfservice-server;h=a83664db2fe56264d44362f4f107ff5b7bbe8ccf;hp=d34e8411c8197dd6c300ef5291f51d538467fdd4;hb=efccaa2d081bfcaaddcf9d89da3c2a065b4caafb;hpb=8a56de51d9b1bf26fde1a32ed283edc3b545d5a4 diff --git a/FS/bin/freeside-selfservice-server b/FS/bin/freeside-selfservice-server index d34e8411c..a83664db2 100644 --- a/FS/bin/freeside-selfservice-server +++ b/FS/bin/freeside-selfservice-server @@ -8,7 +8,8 @@ # Proc::Daemon or somesuch use strict; -use vars qw( $Debug %kids $kids $max_kids $shutdown $log_file $ssh_pid ); +use vars qw( $Debug %kids $kids $max_kids $shutdown $log_file $ssh_pid + $keepalives ); use subs qw( lock_write unlock_write ); use Fcntl qw(:flock); use POSIX qw(:sys_wait_h setsid); @@ -29,6 +30,7 @@ $Debug = 1; # >= 2 will log packet contents, including potentially compromising $shutdown = 0; $max_kids = '10'; #? +$keepalives = 0; #let clientd turn it on, so we don't barf on old ones $kids = 0; my $user = shift or die &usage; @@ -58,6 +60,7 @@ while (1) { warn "entering main loop\n" if $Debug; my $undisp = 0; + my $keepalive_count = 0; my $s = IO::Select->new( $reader ); while (1) { @@ -68,6 +71,10 @@ while (1) { my @handles = $s->can_read(5); unless ( @handles ) { &shutdown if $shutdown; + if ( $keepalives && $keepalive_count++ > 10 ) { + $keepalive_count = 0; + nstore_fd( { _token => '_keepalive' }, $writer ); + } next; } @@ -91,6 +98,12 @@ while (1) { join('', map { " $_=>$packet->{$_}\n" } keys %$packet ) if $Debug > 1; + if ( $packet->{_packet} eq '_enable_keepalive' ) { + warn "enabling keep alives\n" if $Debug; + $keepalives=1; + next; + } + #prevent runaway forking my $warnkids = 0; while ( $kids >= $max_kids ) {