First, I commented out the exit. It "fixed" the problem, but I deemed the solution unacceptable. Behold my fancy debugger!
#!/usr/bin/perl
use strict;
use IO::Socket;
use constant MYPORT => 2000;
$|=1; <-------
my $sock = '';
my $client = '';
$sock = IO::Socket::INET->new(LocalPort => MYPORT,
Type => SOCK_STREAM,
Proto => 'tcp',
Reuse => 1,
Listen => 10)
or die "trouble creating socket: $@\n";
$SIG{'CHLD'} = sub {
print('!'); <-------
wait();
print('@'); <-------
$client->close();
print('#'); <-------
};
print "Accepting connections on Port ", MYPORT, "...\n";
while ($client = $sock->accept())
{
print "Accepted connection from ",
$client->peerhost(), ":", $client->peerport(), "\n";
if (fork() == 0)
{
while (<$client>)
{
chomp;
print $client scalar(reverse($_)), "\n";
}
exit 1;
}
}
print('$'); <-------
print(0+$!, "$!"); <-------
When I noticed '!@#' was being printed, I added '$'. Then I checked why accept was returning by adding a print of $!.
Since I'm not sure what the cause is, I'm not sure if I consider it a bug. In any case, the behavious should be documented.
|