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/


Reply via email to