0

Webサーバーのパフォーマンスをテストするための簡単なテストスクリプト(python)を書いています(このサーバーが行うのはHTTPリダイレクトだけです)。ソケットは非ブロッキングに設定され、epollインスタンスに登録されます。

サーバーがそれ以上の接続を受け入れることができないためにconnect()が失敗したことをどのように知ることができますか?現在、インジケーターとしてEPOLLERRを使用しています。これは正しいです?

編集:前提条件:1)IP層ネットワークの到達不能性は考慮されません。

4

2 に答える 2

1

Connection Refusedこれは、その他のソケットエラーの場合をキャッチします。保留中のソケットでも読み取り/書き込みの可用性(成功)を登録していると想定しているため、関連するファイル記述子の読み取り、書き込み、またはエラーの可用性を通知できなかった接続も手動でタイムアウトする必要があります。許容可能な制限時間。

ECONNREFUSEDaccept()通常、サーバーのキューが制限を超えた場合、またはサーバーがリモートポートのソケットにバインドされていない場合 にのみ返されます。ENETDOWN、、、およびはEHOSTDOWN、TCPよりも下位の層(IPなど)が何らかの理由でホストに到達できないことを認識している場合にのみ返されるため、Webサーバーのパフォーマンスのストレステストには特に役立ちません。ENETUNREACHEHOSTUNREACH

したがって、ストレステストの失敗シナリオの全範囲をカバーするために、タイムアウトを使用して接続を確立するのにかかる時間も制限する必要があります。タイムアウト値の選択はあなた次第です。

于 2012-11-15T01:35:22.523 に答える
1

その状態のための特定のプロトコルがないため、「サーバーがこれ以上の接続を受け入れられないために失敗した」ことを知ることはできません。ECONNREFUSED、接続タイムアウト、EUNREACH などの通常の理由で失敗したことしかわかりません。

于 2012-11-15T02:07:32.527 に答える