126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
+
+
+
+
+
+
-
-
-
+
+
+
|
events = (intptr_t)[_FDToEvents
objectForKey: (void *)((intptr_t)fd + 1)];
events &= ~removeEvents;
if (events == 0) {
if (epoll_ctl(_epfd, EPOLL_CTL_DEL, fd, NULL) == -1)
/*
* When an async connect fails, it seems the socket is
* automatically removed from epoll, meaning ENOENT is
* returned when we try to remove it after it failed.
*/
if (errno != ENOENT)
@throw [OFObserveFailedException
exceptionWithObserver: self
errNo: errno];
@throw [OFObserveFailedException
exceptionWithObserver: self
errNo: errno];
[_FDToEvents removeObjectForKey: (void *)((intptr_t)fd + 1)];
} else {
struct epoll_event event;
memset(&event, 0, sizeof(event));
event.events = (int)events;
|