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 |