MCPcopy Create free account
hub / github.com/F-Stack/f-stack / KqueueCtrlAdd

Method KqueueCtrlAdd

adapter/micro_thread/kqueue_proxy.cpp:168–234  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

166}
167
168bool KqueueProxy::KqueueCtrlAdd(int fd, int events)
169{
170 KqFdRef* item = KqFdRefGet(fd);
171 if (item == NULL)
172 {
173 MT_ATTR_API(320851, 1); // fd error, wtf?
174 MTLOG_ERROR("kqfd ref not find, failed, fd: %d", fd);
175 kqueue_assert(0);
176 return false;
177 }
178
179 item->AttachEvents(events);
180
181 int old_events = item->GetListenEvents();
182 int new_events = old_events | events;
183 if (old_events == new_events)
184 {
185 return true;
186 }
187
188 KqEvent ke;
189 int ret;
190 if (old_events & KQ_EVENT_WRITE) {
191 EV_SET(&ke, fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL);
192 ret = ff_kevent(_kqfd, &ke, 1, NULL, 0, NULL);
193 if (ret == -1) {
194 // TODO, error check
195 item->DetachEvents(events);
196 kqueue_assert(0);
197 return false;
198 }
199 }
200 if (old_events & KQ_EVENT_READ) {
201 EV_SET(&ke, fd, EVFILT_READ, EV_DELETE, 0, 0, NULL);
202 ret = ff_kevent(_kqfd, &ke, 1, NULL, 0, NULL);
203 if (ret == -1) {
204 // TODO, error check
205 item->DetachEvents(events);
206 kqueue_assert(0);
207 return false;
208 }
209 }
210 if (events & KQ_EVENT_WRITE) {
211 EV_SET(&ke, fd, EVFILT_WRITE, EV_ADD, 0, 0, NULL);
212 ret = ff_kevent(_kqfd, &ke, 1, NULL, 0, NULL);
213 if (ret == -1) {
214 // TODO, error check
215 item->DetachEvents(events);
216 kqueue_assert(0);
217 return false;
218 }
219 }
220 if (events & KQ_EVENT_READ) {
221 EV_SET(&ke, fd, EVFILT_READ, EV_ADD, 0, 0, NULL);
222 ret = ff_kevent(_kqfd, &ke, 1, NULL, 0, NULL);
223 if (ret == -1) {
224 // TODO, error check
225 item->DetachEvents(events);

Callers 4

CreateSocketMethod · 0.80
KqueueCtlAddMethod · 0.80
SendDataMethod · 0.80
KqueueCtlAddMethod · 0.80

Calls 5

ff_keventFunction · 0.85
AttachEventsMethod · 0.80
GetListenEventsMethod · 0.80
DetachEventsMethod · 0.80
SetListenEventsMethod · 0.80

Tested by

no test coverage detected