src/server/daemon/event_bsd.c

branch
webdav
changeset 264
81f202caea5b
parent 263
533f9097d712
child 265
59f99038a576
equal deleted inserted replaced
263:533f9097d712 264:81f202caea5b
70 struct kevent changes[64]; 70 struct kevent changes[64];
71 int numchanges = 0; 71 int numchanges = 0;
72 72
73 for(;;) { 73 for(;;) {
74 // wait for events 74 // wait for events
75 int nev = kevent(ev->kqueue, changes, numchanges, events, 64, &timeout); 75 int nev = kevent(ev->kqueue, changes, numchanges, events, 64, &timeout);
76 if(nev == -1) { 76 if(nev == -1) {
77 // TODO: check for error 77 // TODO: check for error
78 perror("kevent"); 78 perror("kevent");
79 continue; 79 continue;
80 } 80 }
90 if(event->fn) { 90 if(event->fn) {
91 u_short kev_flag = 0; 91 u_short kev_flag = 0;
92 int saved_ev = event->events; 92 int saved_ev = event->events;
93 if(!event->fn(ev, event)) { 93 if(!event->fn(ev, event)) {
94 // ret 0 => remove event 94 // ret 0 => remove event
95 kev_flag = EV_DELETE; 95 kev_flag = EV_DELETE;
96
97 if(event->finish) { 96 if(event->finish) {
98 event->finish(ev, event); 97 event->finish(ev, event);
99 } 98 }
100 } else if(saved_ev != event->events) { 99 } else if(saved_ev != event->events) {
101 // events changed 100 // events changed
138 EV_SET(&kev, fd, EVFILT_WRITE, EV_ADD, 0, 0, event); 137 EV_SET(&kev, fd, EVFILT_WRITE, EV_ADD, 0, 0, event);
139 return kevent(h->kqueue, &kev, 1, NULL, 0, NULL); 138 return kevent(h->kqueue, &kev, 1, NULL, 0, NULL);
140 } 139 }
141 140
142 int ev_remove_poll(EventHandler *h, int fd) { 141 int ev_remove_poll(EventHandler *h, int fd) {
143 // TODO: 142 struct kevent kev;
144 return 0; 143 EV_SET(&kev, fd, EVFILT_READ, EV_DELETE, 0, 0, NULL);
144 int r1 = kevent(h->kqueue, &kev, 1, NULL, 0, NULL);
145 EV_SET(&kev, fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL);
146 int r2 = kevent(h->kqueue, &kev, 1, NULL, 0, NULL);
147 // in caase r1 or r2 was successful, we return 0 (no error)
148 return r1 != -1 || r2 != -1 ? 0 : 1;
145 } 149 }
146 150
147 int event_send(EventHandler *h, Event *event) { 151 int event_send(EventHandler *h, Event *event) {
148 return 0; 152 return 0;
149 } 153 }

mercurial