5

基本的なソケットサーバーとしてWindows上のPerl(ActivePerl)を使用fork()していますが、明らかに問題があります(数回経過すると接続を受け入れません)、回避策はありますか?

関連するコードの一部は次のとおりです。

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

3 に答える 3

6

Net :: Serverをインストールして代わりに使用することをお勧めします。これは、リスニングとフォークのロジックをすべて自分で作成する理由はおそらくないためです。Net:: Serverは、ActivePerlを含む多くのプラットフォームで動作することがすでに十分にテストされています。 。Net :: Server :: Forkのパーソナリティは、作成しているコードに最も似ていますが、最小のコストでパフォーマンスが向上するため、代わりにNet :: Server::Preforkを使用することをお勧めします。

于 2010-03-14T00:51:44.680 に答える
3

が正確に 64 を意味する場合は、このディスカッションを参照してください。親プロセスwaitpid -1,&WNOHANGでは、完了した子をクリーンアップするために時々呼び出す必要があります。

于 2010-03-14T01:06:35.227 に答える
1

Windows にはフォークがありません。それをエミュレートしようとすると、通常、理想的とは言えない結果が得られます。

最善の解決策は、フォークを使用しないようにコードを書き直すことです。多分スレッド?

于 2010-03-14T00:30:56.030 に答える