--- projects/cms/source/host/ihost-perl/ihost.pl 2001/03/01 18:53:42 1.23 +++ projects/cms/source/host/ihost-perl/ihost.pl 2001/03/12 23:51:15 1.26 @@ -9,8 +9,8 @@ # methods as you see fit. # - pjm2@ukc.ac.uk # -# $Author: pjm2 $ -# $Id: ihost.pl,v 1.23 2001/03/01 18:53:42 pjm2 Exp $ +# $Author: tdb $ +# $Id: ihost.pl,v 1.26 2001/03/12 23:51:15 tdb Exp $ #------------------------------------------------------------ $| = 1; @@ -33,6 +33,7 @@ use vars qw ( $filter_addr $file_list $fqdn + $pidfile ); if (@ARGV != 2) { @@ -44,6 +45,10 @@ $filter_manager_port = $ARGV[1]; $seq_no = 1; +# write our PID to a file +$pidfile = "/var/tmp/ihost.pid"; +&write_pid(); + &tcp_configure(); &send_udp_packet(); @@ -71,6 +76,8 @@ while (1) { `sleep $delay`; } +# we'll probably never get here... +`rm -f $pidfile`; exit(0); @@ -151,9 +158,17 @@ sub tcp_configure() { print $sock "FILTER\n"; $response = <$sock>; + unless (defined($response)) { + print "Failed: Could not get a filter address from the filter manager.\n"; + exit(1); + } chop $response; $response =~ /(.*);(.*);(.*)/; ($filter_addr, $udp_port, $tcp_port) = ($1, $2, $3); + unless (defined($filter_addr) && defined($udp_port) && defined($tcp_port)) { + print "Failed: Filter address response from server did not make sense: $response\n"; + exit(1); + } print "Got filter data ($filter_addr, $udp_port, $tcp_port)\n"; @@ -359,6 +374,19 @@ sub send_tcp_heartbeat() { close($sock); print "^"; + + return; +} + +#----------------------------------------------------------------------- +# write_pid +# Writes the PID (process ID) of this instance to $pidfile. +# This is then used by a seperate script to check (and restart) ihost. +#----------------------------------------------------------------------- +sub write_pid() { + open PID, ">$pidfile"; + print PID $$; + close PID; return; }