Your code pretty much works, on my system. It issues a warning about the $pid variable, but that's because you aren't using it. It services connections just fine, but you forgot to exit the child so it doesn't loop back to that accept() call on it's closed listen socket. One small change fixes that:
#!/usr/bin/perl -w use IO::Socket; use Net::hostent; # for OO version of gethostbyaddr $PORT = 9000; # pick something not in use $server = IO::Socket::INET->new( Proto => 'tcp', LocalPort => $PORT, Listen => SOMAXCONN, ); $EOL = "\015\012"; $|=1; die "can't setup server" unless $server; while ($client=$server->accept()){ if (fork()){ # $pid not used close $client; #********** Nothing in parent go back and waite } else{ close $server; print $client "Welcome To my server $EOL" ; while ($inp=<$client>){ print "$inp"; print $client "got your Massage $EOL"; } $client->close(); exit 0; # close child before it loops } } On Wednesday, October 16, 2002, at 01:14 PM, Rakhitha Malinda Karunarathne wrote: > i tried it too but after creating the child process the main process > comes > back and start to listne > in line > $client=$sockHandle->accept()){ > then all the child processes blocks > i have atached my code with this > please tel me if there is an error > > in line > > ----- Original Message ----- > From: "James Edward Gray II" <[EMAIL PROTECTED]> > To: "Rakhitha Malinda Karunarathne" <[EMAIL PROTECTED]> > Cc: <[EMAIL PROTECTED]> > Sent: Wednesday, October 16, 2002 11:43 PM > Subject: Re: Help me on concurant comiunication > > >> Again, this is very complicated, so I can really only give basic >> theory. The usual strategy of forking servers is to fork just after >> they receive a connection. The main loop usually looks close to: >> >> while (my $c = $socket->accept) { >> my $child = fork; >> die unless defined $child; >> if ($child == 0) { # in child process >> close $socket; # not needed, but safest >> handle_connection($c); >> exit 0; >> } >> close $c; # in parent process >> } >> >> The other main strategy is preforking, which is better under heavy >> loads. I believe this is a little closer to what you're describing. >> It typically looks like this: >> >> foreach (1..PREFORK_CHILDREN) { >> next if fork; # parent process >> do_child($socket); # child process >> exit 0; # child never loops >> } >> sub do_child { >> my $socket = shift; >> while (my $c = $socket->accept) { >> handle_connection($c); >> close $c; >> } >> } >> >> Of course, all of this is VERY basic. There are plenty of gotchas >> both >> ways. >> >> I'm not sure why your child processes would hang when the parent calls >> accept. This shouldn't happen. You mention that you're on Windows, >> but not your version of Perl. Forking on Windows didn't come until >> version 5.6.0, so you might check that. Also, try closing the >> listening socket in the children, as I did above, just to be safe. >> >> Again, I highly recommend Network Programming with Perl. It covers >> all >> of this very well. The code above is straight out of it. >> >> Good luck with your server. >> >> James >> >> On Wednesday, October 16, 2002, at 11:27 AM, Rakhitha Malinda >> Karunarathne wrote: >> >>> yes my server forks >>> once the server starts it connects to a socket and starts to listen. >>> then create processes as much as possible (about 50) >>> >>> but when one process reach the line >>>>> while($client=$sockHandle->accept()){ >>> #lines to handle the client >>> } >>> >>> all the other processes blocks >>> >>> so the problem is when the fist client connected >>> while this process start to handle tat request one of the other >>> process >>> react to the line >>> $client=$sockHandle->accept() >>> then all the other processes get blocked so the so the process which >>> have a >>> request to handle cant do it >>> >>> I use Windows2000 problem in sort is even when I use fork() when I >>> call the >>> accept() method program stops all the works and waits for a incoming >>> request >>> >>> >>> >>> >>> ----- Original Message ----- >>> From: "James Edward Gray II" <[EMAIL PROTECTED]> >>> To: "Rakhitha Malinda Karunarathne" >>> <[EMAIL PROTECTED]> >>> Cc: <[EMAIL PROTECTED]> >>> Sent: Tuesday, October 15, 2002 11:29 PM >>> Subject: Re: Help me on concurant comiunication >>> >>> >>>> This is a pretty involved issue, so I would need more information to >>>> help. By multiple processes, do you mean your server forks? >>>> >>>> As for more information, Network Programming with Perl by Lincoln D. >>>> Stein, covers this issue in detail and is quite good, I think. >>>> >>>> James >>>> >>>> On Tuesday, October 15, 2002, at 12:30 PM, Rakhitha Malinda >>>> Karunarathne wrote: >>>> >>>>> I wrote a program (a server ) to listen for clients requests using >>>>> multiple processes but while a one process waits to incoming client >>>>> requests all the other processes blocks >>>>> how can i over come this problem >>>>> I used IO::Socket::INET for comiunication is there a better way and >>>>> where can i find good documentation to learn about them >>>>> ? >>>> >>> >> > <server temp.pl>-- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]