2011-04-26 49 views
0

我正在使用select()語句來處理使用Unix C套接字的多個客戶端連接。我想斷開閒置的客戶端 - 如果在一段時間後我沒有收到客戶的任何消息。我查看了select()的超時功能,但這是針對整個選擇而不是單個客戶端的。斷開空閒套接字/客戶端C

如何終止特定客戶端的連接?

回答

3

對於服務器,您通常在循環中調用select。在循環的頂部,您從客戶端連接構建您的文件描述符列表。 在這一點上,我會計算您選擇等待的最長時間(直到下一個客戶端連接應該超時的最短時間)。然後通過該超時呼叫選擇。選擇結束後,檢查每個連接以查看是否收到數據,是否收到新連接或是否已達到超時。處理任何數據,打開/關閉任何連接,然後返回到循環的頂部。

1

當您在連接上進行操作時,請設置一個表示套接字上次發生事件的時間戳。當該套接字的空閒回調發現當前時間與時間戳之間的差異大於超時時間時,觸發超時事件並清理套接字。