我在Windows上的Perl(ActivePerl)上使用fork()
作为基本套接字服务器,但显然存在问题(几次后它不会接受连接),是否有解决方法?
以下是相关代码的部分:
while($client = $bind->accept()) {
$client->autoflush();
if(fork()){ $client->close(); }
else { $bind->close(); new_client($client); exit(); }
}
答案 0 :(得分:6)
我建议安装Net::Server并使用它,因为你可能没有令人信服的理由让你自己编写所有的监听和分支逻辑,而Net :: Server已经经过充分测试许多平台,包括ActivePerl。 Net::Server::Fork个性与您编写的代码最相似,但我建议使用Net::Server::Prefork,因为它以最低的成本提供更好的性能。
答案 1 :(得分:3)
如果通过一些,你的意思是64,那么你应该看到this discussion。在父进程中,您应该每隔一段时间调用waitpid -1,&WNOHANG
来清理已完成的孩子。
答案 2 :(得分:1)
Windows没有fork。试图模仿它通常会得到不太理想的结果。
最好的解决方案可能是重写代码,因此它不使用fork。也许是线程?