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 >>> ? >> > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]