----- Original Message -----
From: Xiaofang Zhou <[EMAIL PROTECTED]>
Date: Wednesday, February 9, 2005 6:00 am
Subject: problem on socket and fork

> Hi,
Hello,
> 
> I got some problem with socket and fork. I'm running my script
> on Activeperl5.6 on xp command box. I copy most of the code from
> Lincoln's book on Network programming with Perl. But my code
> strill can't work after fork.
> 
> --------------------
> ....some other definitions here....
> ........
> my $quit = 0;
> $SIG{CHLD}= sub {
>               my $pid;
>               while ($pid = waitpid(-1, WNOHANG) > 0) {
>                       warn "Reaped pid = $pid\n";
>               }
>       };
> $SIG{INT} = sub { $quit++ };
> 
> my $listen_socket = IO::Socket::INET->new(
>               LocalPort       => PORT,
>               Listen          => 20,
>               Proto           => 'tcp',
>               Reuse           => 1,
>               Timeout         => 0,
>       );
> 
> die "Can't create a listening socket : $@" unless $listen_socket;
> warn "Server ready. Waiting for connections...\n";
> 
> $listen_socket->blocking(0);
> 
> my $connection;
> my $child;
> 
> while (! $quit) {
>       next unless $connection = $listen_socket->accept;
>       defined ($child = fork()) or warn "Can't fork : $!\n";
>       print "New connection: ",                                         
>                               <=== this is line 62
>               $connection->sockhost(), ":", $connection->sockport(),
>               " <=> ",
>               $connection->peerhost(), ":", $connection->peerport(),
>               "\n";
>       if ($child == 0) {
>               $listen_socket->close;
>               process($connection);
>               exit 0;
>       } else {
>               print "Fork pid = $child...\n";
>       }
>       $connection->close;
> }
> 
> 1;
> sub process {
> .......
> 
> --------------------
> So I expect both parent and child process will print a line like 
> this after 'fork':
> New connection: ???.???.???.???:??? <=> .....
> 
> Which can make me confirm that both process shares the sock 
> connections after fork.
> Actually the result is like this:
> -----------------------
> Server ready. Waiting for connections...
> New connection: 127.0.0.1:9119 <=> 127.0.0.1:4709
> Fork pid = -5740...
> Use of uninitialized value in print at cwcd.pl line 62.
> Use of uninitialized value in print at cwcd.pl line 62.
> Use of uninitialized value in print at cwcd.pl line 62.
> Use of uninitialized value in print at cwcd.pl line 62.
> -----------------------
> So why the child process can't get a valid '$connection'? 
that's weird, it works on my XP box.

P.S. enjoy the reading, the book is great.
> 
> Thanks,
>            Xiaofang Zhou
>            [EMAIL PROTECTED]
> 
> 
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> <http://learn.perl.org/> <http://learn.perl.org/first-response>
> 
> 
> 


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to