2012-02-09 56 views
0

我有一個現有的多線程C++程序,它使用一個套接字池進行讀取和寫入。 發件人線程使用下一個可用套接字發送HTTP請求。 接收者therad輪詢套接字池(使用poll()方法)並讀取HTTP響應。 接收器線程如何從池的套接字中檢測到可能的HTTP響應超時?使用輪詢的套接字響應超時

回答

2

簡單的例子了我的頭頂部:

  1. 當你發送一個請求,創建一個包含FD,任何你需要的邏輯連接信息,和絕對時間的物體上,你會考慮的超時
  2. 保持這些對象按時間排序的優先級隊列,所以最快至到期總是在前面(這退化爲一個FIFO隊列中,如果所有的請求得到相同的超時)
  3. 當你查詢,計算從現在到隊列上第一絕對時間的超時時間
  4. 如果輪詢返回零(或者每次醒來時),獲取當前時間,並在隊列超時時返回任何當前超時時間爲
  5. 的請求,您需要獲得成功的響應從隊列中刪除關聯的對象以及
+0

我打算使用poll()方法讓接收器線程永久等待,並在數據準備好接收時提醒我。當套接字超時時,有沒有辦法用poll方法接收事件? – user292167 2012-02-09 18:29:16

+0

你只是通過輪詢超時:當它返回_either_因爲你有一個事件,因爲你超時。返回碼會告訴你哪個。做一個循環,你仍然有效地等待着,當你沒有其他事情發生的時候,你就會醒來,並且請出一些請求。 – Useless 2012-02-09 18:52:40