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/