I wrote this scrpt to fork off a few child processes, then the child
processes process some data, and send the data back to the parent
through a tcp socket.
This is not working as i expected it would. Why not? How can it be corrected?


#!/usr/bin/perl -w
use strict;
use IO::Socket::INET;
print $$,"\n";
for my $num (1 .. 100) {
print "Working on: $num \n";
my $pid = fork;
if ($pid > 0) {
# Parent
my $listen = IO::Socket::INET->new(
LocalAddr => "127.0.0.1",
LocalPort => "8989",
Listen => 1024,
ReuseAddr => 1,
Proto => 'tcp',
) or
die "Unable to listen: $!\n";

while(my $conn = $listen->accept()) {
warn "Got conn from ",$conn->peerhost,":",$conn->peerport,"\n";
my $line = $conn->read(1024);#do { local $/; <$conn>; };
if($line =~ /^(\d+):(\d+):.*/) {
print "Child with pid $1 from num $2 says $line\n";
}
else {
print "Invalid line : $line\n";
}
$conn->close();
}
exit(0);
}
elsif($pid == 0) {
my $sock =  IO::Socket::INET->new(
PeerAddr => "127.0.0.1:8989",
Proto => 'tcp',
);
unless($sock) {
warn "Unable to create sock to send data, child $num pid $$\n";
exit(1);
}

$sock->send( "$$:$num:, Child  exiting\n");
close($sock);
exit(0);
}

else {
warn "Unable to fork: $!\n";
}
}

====
]$ ./f.pl
6193
Working on: 1
Unable to listen: Address already in use
Got conn from 127.0.0.1:46546
Child with pid 6194 from num 1 says 6194:1:, Child  exiting
Use of uninitialized value $_ in print at ./f.pl line 21, <GEN21> line 1.
]$

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to