Search code examples
windowsperlsocketsactiveperl

Why does my ActivePerl program on Windows stop accepting socket connections?


I'm using fork() on Perl on Windows (ActivePerl) for a basic socket server, but apparently there are problems (it won't accept connections after a few times), is there any workaround?

Here is the portion of the relevant code:

while($client = $bind->accept()) {
    $client->autoflush();
    if(fork()){ $client->close(); }
    else { $bind->close(); new_client($client); exit(); }
}

Solution

  • I'd suggest installing Net::Server and using it instead, because there's probably no compelling reason for you to write all of the listening and forking logic yourself, and Net::Server is already well-tested to work on many platforms including ActivePerl. The Net::Server::Fork personality is the most similar to the code you're writing, although I'd suggest using Net::Server::Prefork instead, since it offers better performance at a minimal cost.