added -E switch
[tridge/junkcode.git] / epoll.c
1 #include <sys/epoll.h>
2 #include <errno.h>
3
4 /*
5  written by Stefan Metzmacher <metze@samba.org>
6
7  this code calls epoll_wait() in a endless loop with a
8  timeout of 1000 = 1s, before the loop we add one event
9  to epoll via epoll_ctl(EPOLL_CTL_ADD), we add it with an event mask
10  of 0, so we don't request notification for any events!
11
12  this test demonstrates that we'll get an EPOLLHUP notification,
13  when the fd was closed by the other end of the pipe/socket
14
15  this programm used the stdin (fd=0).
16  
17  so use it like this:
18  (sleep 5 &) | ./epoll_test
19 */
20 int main(void) {
21         int epoll_fd;
22         struct epoll_event event;
23         int socket_fd;
24         int ret, i;
25 #define MAXEVENTS 1
26         struct epoll_event events[MAXEVENTS];
27         int timeout = -1;
28
29         epoll_fd = epoll_create(64);
30
31         socket_fd = 0;
32
33         memset(&event, 0, sizeof(event));
34         event.events = 0;
35         event.data.fd = socket_fd;
36         ret = epoll_ctl(epoll_fd, EPOLL_CTL_ADD, socket_fd, &event);
37         printf("epoll_ctl:ADD: %d\n", ret);
38
39         while (1) {
40                 ret = epoll_wait(epoll_fd, events, MAXEVENTS, 1000);
41                 if (ret == -1 && errno != EINTR) {
42                         return -1;
43                 }
44                 printf("epool_wait: ret[%d] errno[%d]\n",ret, errno);
45         
46                 for (i=0;i<ret;i++) {
47                         printf("event i[%d] fd[%d] events[0x%08X]", i, events[i].data.fd, events[i].events);
48                         if (events[i].events & EPOLLIN) printf(" EPOLLIN");
49                         if (events[i].events & EPOLLHUP) printf(" EPOLLHUP");
50                         if (events[i].events & EPOLLERR) printf(" EPOLLERR");
51                         if (events[i].events & EPOLLOUT) printf(" EPOLLOUT");
52                         printf("\n");
53                 }
54         }
55
56         return 0;
57 }