2012-06-27 47 views
0

我想了解epoll_wait的「事件」指針。當epoll_wait返回時,這個指針是否指向一些內存(未由用戶分配),其中存在所有事件結構?或者,我們是否必須爲該指針分配內存,然後傳遞指針,以便事件在該內存位置被填滿?多少內存分配給「事件」指針epoll_wait

如果內存已被分配,那麼多少應該分配?假設我想在10,000個套接字上執行epoll_wait。所有這些都將被檢查以讀取數據(EPOLLIIN)。那麼,我應該將相當於10000個事件結構的內存分配給* events嗎?

感謝,

VSN

回答

1

你有沒有看在例如例子手冊頁epoll(7)?您需要提供實際的事件數組,或者像示例中那樣使用適當的數組,或者通過分配堆(以及稍後釋放它)。

+0

我沒有看到那個......我在看另一個「http://www.kernel.org/doc/man-pages/online/pages/man2/epoll_wait.2.html」。因此,這意味着,我必須給儘可能多的事件結構(無論是作爲在堆上的陣列或存儲器),其餘是「epoll_wait」 -ing上套接字的數目。對? – VSN

+0

我認爲MAXEVENTS是我期待設置的事件數量。例如,EPOLLIN是一個事件,EPOLLOUT是另一個事件。我錯了嗎? – VSN

+0

@VSN關於你的第一個問題,是的,這是正確的。來想一想,我曾經做過一個服務器,每次客戶端連接/斷開連接時,都會重新分配epoll事件「數組」。儘管沒有任何代碼。關於你的第二個問題,我不記得了。這是一個位域,所以你可以在一個事件結構中獲得兩個事件。 –

1

MaxEvents是你的陣列有多大的元素。如果您分配內存是sizeof(epoll_event) * 10,然後maxEvents是10 MaxEvents是無關的,你在聽上的插槽數量。