http://qs321.pair.com?node_id=6906

Jason0x21 has asked for the wisdom of the Perl Monks concerning the following question:

I'm working on a server daemon program that will provide a running "tail" of a log file to clients connected with "telnet". To start with, I used the forking server shown on pages 350-351 in Chapter 6 of the book. I modified the spawn call so that the code looks like this...
    spawn sub {
        my($nodie) = 1;
        my(@tail)  = ();
        my($err)   = 0;
        print "Hello there, $name, it's now ", scalar localtime, $EOL;
        open(REQLOG,$ReqLog) || confess "can't open $ReqLog: $!";
        while(<REQLOG>) {
            push(@tail,$_);
            if($#tail>10) {  shift(@tail);  }
            }
        foreach(@tail) {  print $_,"\r";  }
        while($nodie) {
            while(<REQLOG>) {
                if(! print $_,"\r") {
                    confess "can't print to socket: $!";
                    $nodie = 0;  last;
                    }
                    }
                }
            sleep(5);  seek(REQLOG,0,1);
            }
        };
    }
The "tailing" procedure works just fine, the problem happens when I disconnect from the client side. The forked server sending data to the client doesn't exit. I don't get any messages. Is there a signal I'm supposed to be looking for here? Thanks in advance.