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].write = (flag & EPOLLOUT) != 0;
|
||||||
e[i].read = (flag & (EPOLLIN | EPOLLHUP)) != 0;
|
e[i].read = (flag & (EPOLLIN | EPOLLHUP)) != 0;
|
||||||
e[i].error = (flag & EPOLLERR) != 0;
|
e[i].error = (flag & EPOLLERR) != 0;
|
||||||
|
e[i].eof = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
|
|||||||
@@ -73,9 +73,11 @@ sp_wait(int kfd, struct event *e, int max) {
|
|||||||
for (i=0;i<n;i++) {
|
for (i=0;i<n;i++) {
|
||||||
e[i].s = ev[i].udata;
|
e[i].s = ev[i].udata;
|
||||||
unsigned filter = ev[i].filter;
|
unsigned filter = ev[i].filter;
|
||||||
e[i].write = (filter == EVFILT_WRITE);
|
bool eof = (ev[i].flags & EV_EOF) != 0;
|
||||||
e[i].read = (filter == EVFILT_READ);
|
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].error = false; // kevent has not error event
|
||||||
|
e[i].eof = eof;
|
||||||
}
|
}
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ struct event {
|
|||||||
bool read;
|
bool read;
|
||||||
bool write;
|
bool write;
|
||||||
bool error;
|
bool error;
|
||||||
|
bool eof;
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool sp_invalid(poll_fd fd);
|
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;
|
result->data = (char *)err;
|
||||||
return SOCKET_ERR;
|
return SOCKET_ERR;
|
||||||
}
|
}
|
||||||
|
if(e->eof) {
|
||||||
|
force_close(ss, s, &l, result);
|
||||||
|
return SOCKET_CLOSE;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user