2009-07-29 11 views
2

を聞く設定し、SOMAXCONNの値を評価します私は自分のサーバープログラムを実行するホストシステムです。 バックログとしてSOMAXCONNを使用すると、通常はtcp.hで128で定義されているSOMAXCONNの値にハードコーディングするのと同等です。プログラムで私のように聞く機能を使用するサーバー側プログラミングのためのバックログパラメータ

ただし、somaxconnは調整可能なsysctlパラメータです。/proc/sys/net/core/somaxconnの値を変更するか、sysctlを使用してnet.core.somaxconnを変更して変更します。

通常、より良いシステムパフォーマンスを得るためにsomaxconnを変更します。 私のプログラムは、プログラムが開始された時点で、システムのsomaxconnを評価することで利点を生かせます。

私はファイル/ proc/sys/net/core/somaxconnを開き、含まれている値を読み取ることができましたが、特にsomaxconnへのファイルパスは、ディストロ

c/C++でsomaxconnを評価できるAPIまたはサンプルコードはありますか?

また、私が欠陥のある発想に至るいくつかの重要な点を欠いている場合は教えてください。

また、私のアプリケーションをWindowsに移植したいので、Windowsプログラマーもいくつかの役に立つ洞察を共有することができます!

事前に、すべての仲間のハッキングに感謝します。

+0

ウィンドウでは、https://msdn.microsoft.com/en-us/library/windows/desktop/ms739168.aspxに「SOMAXCONNに設定されている場合、ソケットを担当する基本サービスプロバイダは、バックログを最大の合理的な値に戻してください。実際のバックログ値を取得するための標準的な規定はありません。だからこの特別な価値を使い、それを忘れてしまいます。 Windows SDKでは、winsock2.hはSOMAXCONNを0x7fffffffとして定義しています。これは実際には特別な値です。他に何も渡さない –

答えて

4

プラットフォームに応じて、kern.ipc.somaxconnのsysctl()が探しているものかもしれません。

しかし、私があなたの質問を正しく理解していれば、可能な限り最大のバックログサイズを使用することが目標です。 listen()に渡されたバックログ値は、システムの設定された制限に静かに制限されることは私の理解です。だから、あなたのソリューションは単に "非常に大きな"バックログ値でlisten()を呼び出すことができます。

+0

GOOGLEサーバーでも、それらがLinux上で動作している場合、同じバックログ値が128ですか? – codingfreak

+0

@codingfreak:あなたがここで何を意味するのか分かりません。 mdkの質問によると、somaxconnは調整可能なパラメータです。 128は厳しい制限ではありませんが、SOMAXCONNはtcp.hの128として "通常"#定義されています。この値は必ずしもシステムの値を反映しているとは限りません。 –

+0

バックログをnet.core.somaxconnより大きい値に設定しないでください。これは、linuxではatleastです。マンページが値を切り捨てると言っていることをしていないように思われるからです。私はいつも、私のシステムがいつもすぐに多くの接続を開いたベンチマークで立ち往生していた理由を調べようと一生懸命に過ごしました。バックログ値を(somaxconn-1)に下げるとすぐに問題は解決しました。 – Neopallium

関連する問題