2012-12-07 43 views
2

我討厭這種情況(MACOSX)Perl - 網絡 - 我如何處理超過128個套接字SOMAXCONN?

$ perl -MSocket -le 'print SOMAXCONN' 
128 

我該如何處理超過128個插座?我使用IO :: Socket :: INET(此時與IO :: Select一起復用),但我有這個限制。

我正在考慮pre-fork N進程(每個處理128使用select或poll),但我不知道它是否可以工作。一些想法?

+0

使用我的系統!我得到2,147,483,647,即32位有符號。我猜這是平臺的一個屬性,但我不是要問的人 – Borodin

+0

這是許多系統上的可配置設置:http://serverfault.com/questions/271380/how-can-i-increase-the-value -of-somaxconn – duskwuff

+0

@duskwuff humm ...我想在perl中的一些解決方案,但在TCP/IP我認爲這是不可能的。 –

回答

5

這是OS X內核級別的可配置限制。幸運的是,它很容易修復,但只有當你有根。這裏是an article explaining how to tweak the kernel configuration。相關條目是kern.ipc.somaxconn

否則,您可以嘗試使用線程,不確定每個線程是否獲取其自己的套接字分配,或任何數量的pre-forking servers on CPAN

+0

我知道Socket :: SOMAXCONN()返回一個常量,如果我改變了kern.ipc.somaxconn中的值,我不能用一種便攜的方式來識別它。我可以從配置文件讀取,至少Net :: Server :: Proto :: TCP是如何工作的。我的意圖是理解非阻塞I/O如何在tcp套接字中工作,特別是在select/poll機制中。謝謝Schwern –

+0

請注意,鏈接的文章錯誤和冒犯地將SOMAXCONN描述爲「可以在任何時候打開的最大套接字數量」。看到我對原帖的評論。 – pilcrow