Unknown User <knowsuperunkn...@gmail.com> writes: > 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
A message like this usually means that the port you're trying to use is already in use by some other process. > 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/