mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 20:23:06 +00:00
fix kqueue eof event
This commit is contained in:
@@ -60,6 +60,7 @@ sp_wait(int efd, struct event *e, int max) {
|
||||
e[i].write = (flag & EPOLLOUT) != 0;
|
||||
e[i].read = (flag & (EPOLLIN | EPOLLHUP)) != 0;
|
||||
e[i].error = (flag & EPOLLERR) != 0;
|
||||
e[i].eof = false;
|
||||
}
|
||||
|
||||
return n;
|
||||
|
||||
@@ -73,9 +73,11 @@ sp_wait(int kfd, struct event *e, int max) {
|
||||
for (i=0;i<n;i++) {
|
||||
e[i].s = ev[i].udata;
|
||||
unsigned filter = ev[i].filter;
|
||||
e[i].write = (filter == EVFILT_WRITE);
|
||||
e[i].read = (filter == EVFILT_READ);
|
||||
bool eof = (ev[i].flags & EV_EOF) != 0;
|
||||
e[i].write = (filter == EVFILT_WRITE) && (!eof);
|
||||
e[i].read = (filter == EVFILT_READ) && (!eof);
|
||||
e[i].error = false; // kevent has not error event
|
||||
e[i].eof = eof;
|
||||
}
|
||||
|
||||
return n;
|
||||
|
||||
@@ -10,6 +10,7 @@ struct event {
|
||||
bool read;
|
||||
bool write;
|
||||
bool error;
|
||||
bool eof;
|
||||
};
|
||||
|
||||
static bool sp_invalid(poll_fd fd);
|
||||
|
||||
@@ -1461,6 +1461,10 @@ socket_server_poll(struct socket_server *ss, struct socket_message * result, int
|
||||
result->data = (char *)err;
|
||||
return SOCKET_ERR;
|
||||
}
|
||||
if(e->eof) {
|
||||
force_close(ss, s, &l, result);
|
||||
return SOCKET_CLOSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user