2010-09-17 44 views
0

我在討論如何將User結構映射到它們的套接字文件描述符。我正在考慮保留一個MAX_CONNECTIONS大小的void指針數組,並將該指針存儲爲文件描述符的鍵值。用戶到套接字的高效映射

我遇到的問題是我如何計劃處理我的收件人。我現在撥打pipe()來製作一個管道,然後fork()的流程來處理recv。我可能也想跟蹤這些,以便能夠處理。

我目前做的是循環遍歷用戶的鏈接列表中,找到一個匹配的描述,並從那裏

問去:這是映射插座的連接用戶的高效和/或接受的方法給他們,還是我應該練習一些其他的巫術?

我很欣賞任何爲我的(可能是毫無意義的)困境所付出的努力。

+0

假設你正在使用poll()或epoll()而不是select(),那麼呢? – caf 2010-09-17 01:46:15

+0

我正在使用select來查找何時需要閱讀。有沒有理由我應該這樣做呢? – Codeacula 2010-09-17 01:52:37

回答

3

如果你沒有很多客戶,那就沒問題。你不會爲很多用戶花費很多時間。你可能想嘗試使用散列表(或字典,關聯數組)。

ANSI-C中有無數的自由/開放實現,或者你可以自己推出。您只需要每個用戶使用一些獨特和恆定的標識符,這將成爲您的關鍵。如果你想有一個雙向關係(雙向映射),你可以有另一個散列表,你可以通過文件描述符存儲用戶。

散列表上的操作是O(1)的平均值。哈希表本身使用O(N)空間,其中N是一個很大的數字(但不是太大)。不要擔心這一點。

看看this one。您可能也有興趣this question

+0

我一直在做我自己的事,因爲這是一個學習練習。感謝您的資源和答案! – Codeacula 2010-09-17 01:54:05

+0

不客氣! – 2010-09-17 03:55:18