2012-06-27 2 views
0

epoll_wait의 "events"포인터를 이해하려고합니다. epoll_wait가 리턴 될 때,이 포인터는 모든 이벤트 구조가있는 일부 메모리 (사용자가 할당하지 않음)를 가리 킵니까? 또는이 포인터에 메모리를 할당 한 다음 포인터를 전달하여 이벤트가 해당 메모리 위치에 채워지도록해야합니까?epoll_wait에서 "events"포인터에 할당 할 메모리 양

메모리를 할당해야한다면 얼마만큼 할당해야합니까? 10,000 소켓에서 epoll_wait을하고 싶다고 가정 해 봅시다. 그들 모두는 읽혀질 데이터 (EPOLLIIN)를 점검해야한다. 그래서, 이벤트에 10,000 개의 이벤트 구조를 할당해야합니까?

감사합니다,

VSN

답변

1

는, 예를 들어의 예를 살펴 보았다 epoll(7) 매뉴얼 페이지? 예제에서와 같이 적절한 배열로 실제 이벤트 배열을 제공하거나 힙을 할당하여 나중에 해제해야합니다.

+0

나는 그걸 보지 못했습니다 ... 나는 다른 "http://www.kernel.org/doc/man-pages/online/pages/man2/epoll_wait.2.html"을보고있었습니다. 그래서, 나는 "epoll_wait"이 될 소켓의 수만큼 많은 이벤트 구조 (배열이나 힙의 메모리)를 제공해야합니다. 권리? – VSN

+0

나는 MAXEVENTS가 내가 기대하고있는 이벤트의 숫자라고 생각했다. 예를 들어 EPOLLIN은 하나의 이벤트이고 EPOLLOUT은 다른 이벤트입니다. 내가 잘못? – VSN

+0

@VSN 첫 번째 질문에 대해서는 맞습니다. 그것에 대해 생각 해보니, 한 번 epoll 이벤트가있는 서버를 만들었습니다. 배열은 클라이언트가 연결되거나 연결이 끊어 질 때마다 다시 할당됩니다. 아무 코드도 남겨 두지 마라. 두 번째 질문에 대해서는 기억이 안납니다. 비트 필드이므로 한 이벤트 구조에서 두 개의 이벤트를 얻을 수 있습니다. –

1

MaxEvents는 배열의 요소 크기입니다. sizeof(epoll_event) * 10 인 메모리를 할당하면 maxEvents은 10입니다. MaxEvents는 수신 대기중인 소켓 수와 관련이 없습니다.