【问题标题】:Why does my ActivePerl program on Windows stop accepting socket connections?为什么我在 Windows 上的 ActivePerl 程序停止接受套接字连接?
【发布时间】:2011-01-27 07:04:41
【问题描述】:

我在 Windows 上的 Perl (ActivePerl) 上使用fork() 作为基本套接字服务器,但显然存在问题(几次后它不接受连接),有什么解决方法吗?

以下是相关代码部分:

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

【问题讨论】:

    标签: windows perl sockets activeperl


    【解决方案1】:

    Windows 没有分叉。模仿它的尝试通常会得到不太理想的结果。

    最好的解决方案可能是重写您的代码,使其不使用 fork。也许是线程?

    【讨论】:

    • Windows 上的 Perl 在后台模拟 fork() 线程。
    【解决方案2】:

    我建议安装 Net::Server 并改用它,因为您可能没有令人信服的理由来自己编写所有的监听和分叉逻辑,而且 Net::Server 已经过良好的测试,可以在许多平台上工作包括 ActivePerl。 Net::Server::Fork 个性与您正在编写的代码最相似,但我建议改用 Net::Server::Prefork,因为它以最低的成本提供更好的性能。

    【讨论】:

      【解决方案3】:

      如果几个,你的意思是64,那么你应该看到this discussion。在父进程中,您应该每隔一段时间调用waitpid -1,&WNOHANG 来清理已完成的子进程。

      【讨论】:

        猜你喜欢
        • 2019-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        相关资源
        最近更新 更多