src/server/daemon/event_bsd.c

changeset 133
87b405d61f64
parent 111
c93be34fde76
child 170
711d00eeed25
equal deleted inserted replaced
132:e9afb5387007 133:87b405d61f64
101 } 101 }
102 102
103 for(int i=0;i<nev;i++) { 103 for(int i=0;i<nev;i++) {
104 event_t *event = (event_t*)events[i].udata; 104 event_t *event = (event_t*)events[i].udata;
105 if(event->fn) { 105 if(event->fn) {
106 int ep = event->poll;
106 if(event->fn(ev, event)) { 107 if(event->fn(ev, event)) {
107 // TODO: reassociate? 108 // TODO: reassociate?
109 // TODO: check ep and event->poll
108 } else if(event->finish) { 110 } else if(event->finish) {
109 event->finish(ev, event); 111 event->finish(ev, event);
110 } 112 }
111 } 113 }
112 } 114 }
125 127
126 return h->ports[cp]; 128 return h->ports[cp];
127 } 129 }
128 130
129 int ev_pollin(event_handler_t *h, int fd, event_t *event) { 131 int ev_pollin(event_handler_t *h, int fd, event_t *event) {
132 event->poll = EVENT_POLLIN;
130 struct kevent kev; 133 struct kevent kev;
131 EV_SET(&kev, fd, EVFILT_READ, EV_ADD, 0, 0, event); 134 EV_SET(&kev, fd, EVFILT_READ, EV_ADD, 0, 0, event);
132 return kevent(ev_get_port(h), &kev, 1, NULL, 0, NULL); 135 return kevent(ev_get_port(h), &kev, 1, NULL, 0, NULL);
133 } 136 }
134 137
135 int ev_pollout(event_handler_t *h, int fd, event_t *event) { 138 int ev_pollout(event_handler_t *h, int fd, event_t *event) {
139 event->poll = EVENT_POLLOUT;
136 struct kevent kev; 140 struct kevent kev;
137 EV_SET(&kev, fd, EVFILT_WRITE, EV_ADD, 0, 0, event); 141 EV_SET(&kev, fd, EVFILT_WRITE, EV_ADD, 0, 0, event);
138 return kevent(ev_get_port(h), &kev, 1, NULL, 0, NULL); 142 return kevent(ev_get_port(h), &kev, 1, NULL, 0, NULL);
139 } 143 }
140 144

mercurial