2010-03-14 65 views
5

我在基於套接字服務器的Windows(ActivePerl)上使用Perl上的fork(),但顯然存在問題(幾次後它不會接受連接),是否有任何解決方法?爲什麼Windows上的ActivePerl程序停止接受套接字連接?

下面是相關的部分代碼:

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

回答

6

我建議安裝Net::Server並改爲使用它,因爲可能沒有令人信服的理由讓你自己編寫所有的監聽和分配邏輯,而且Net :: Server已經在許多平臺上運行良好,包括的ActivePerl。 Net::Server::Fork個性與您正在編寫的代碼最相似,但我建議使用Net::Server::Prefork,因爲它以最低的成本提供更好的性能。

1

Windows沒有叉子。試圖模仿它通常不會產生理想的結果。

最好的解決方案可能是重寫你的代碼,所以它不使用fork。也許線程?

+2

Windows上的Perl在後臺模擬帶有線程的fork()。 – 2010-03-14 01:02:31

3

如果通過幾個,你的意思是剛好64,那麼你應該看到this discussion。在父母程序中,您應該每隔一段時間致電waitpid -1,&WNOHANG以清理已完成的孩子。

相關問題