Listing 10. getservertype2.pl

#!/usr/bin/perl -w
# getservertype2.pl - a forking version
use strict;
use IO::Socket;
$|=1;
my @hosts = qw(
    www.ssc.com
    www.linuxjournal.com
    www.perl.com
    www.perl.org
    www.nytimes.com
    www.onsight.com
    www.avue.com
);
sub doit {
    my $server = shift;
    print "processing $server...\n";
    my $sock = new IO::Socket::INET(
                    PeerAddr => $server,
                    PeerPort => 80,
                    Proto    => 'tcp');
    $sock or die "no socket for $_: $!";
    print $sock "GET / HTTP/1.0\n\n";
    while (<$sock>) {
   if (/^Server:\s*(.*)/) {
       print "    $server: $1\n";
       last;
   }
    }
}
my $kid;
for (@hosts) {
    # fork, and if this is the parent,
    # go to the next servername
    next if $kid = fork;
    die "fork: $!" unless defined $kid;
    # this is the child, so process
    # servername
    doit $_;
    exit;
}
# reap all the children
1 while wait != -1;
print "Parent exiting...\n";