2012-02-09 11 views
0

私は、読み取りと書き込みのためにソケットのプールを使用する既存のマルチスレッドC++プログラムを持っています。 送信側スレッドは、使用可能な次のソケットを使用してHTTP要求を送信します。 受信者theradが(poll()メソッドを使用して)ソケットのプールをポーリングし、HTTP応答を読み取ります。 受信スレッドがプールのソケットからHTTP応答タイムアウトを検出する方法を教えてください。ポーリングを使用したソケットレスポンスタイムアウト

答えて

2

私の頭の上からクイック例:

  1. あなたがリクエストを送信し、FD、あなたが必要とする任意の論理接続情報を含むオブジェクトを作成し、あなたがそれを検討しましょうれる絶対時間タイムアウトします。
  2. これらのオブジェクトのプライオリティキューを時間順に並べておくと、最も早く有効期限が切れます(すべての要求が同じタイムアウトになると、FIFOキューに縮退します)。
  3. ポーリングすると、 から今すぐからキューの最初の絶対時刻までのタイムアウトを計算してください。
  4. ポーリングが0を返す(または起床するたびに)、現在の時刻を取得し、タイムアウトが過去のものであるすべてのリクエストを待ち合わせる
  5. 応答が成功すると、キューから関連オブジェクトも削除する
+0

受信側スレッドを永遠に待機させ、データ受信準備ができたら警告を出す予定です。ソケットがタイムアウトすると、ポーリング方式でイベントを受け取る方法はありますか? – user292167

+0

あなたはただタイムアウトをポーリングするだけです:タイムアウトを起こしたため、イベントがあるので_either_を返します。リターンコードはあなたにどのようなことを伝えます。それはループで行い、あなたはまだ効果的に永遠に待っています。何も起こっていないときには、起きていくつかのリクエストをタイムアウトさせます。 – Useless

関連する問題