minor bugfix : socket_server_poll never returns -1

This commit is contained in:
Cloud Wu
2021-04-06 16:45:51 +08:00
parent 8ad6622936
commit 85dde52107

View File

@@ -1672,10 +1672,11 @@ socket_server_poll(struct socket_server *ss, struct socket_message * result, int
ss->event_index = 0; ss->event_index = 0;
if (ss->event_n <= 0) { if (ss->event_n <= 0) {
ss->event_n = 0; ss->event_n = 0;
if (errno == EINTR) { int err = errno;
continue; if (err != EINTR) {
skynet_error(NULL, "socket-server: %s", strerror(err));
} }
return -1; continue;
} }
} }
struct event *e = &ss->ev[ss->event_index++]; struct event *e = &ss->ev[ss->event_index++];
@@ -1752,9 +1753,11 @@ socket_server_poll(struct socket_server *ss, struct socket_message * result, int
if (e->eof) { if (e->eof) {
// For epoll (at least), FIN packets are exchanged both ways. // For epoll (at least), FIN packets are exchanged both ways.
// See: https://stackoverflow.com/questions/52976152/tcp-when-is-epollhup-generated // See: https://stackoverflow.com/questions/52976152/tcp-when-is-epollhup-generated
int r = halfclose_read(s) ? -1 : SOCKET_CLOSE; int halfclose = halfclose_read(s);
force_close(ss, s, &l, result); force_close(ss, s, &l, result);
return r; if (!halfclose) {
return SOCKET_CLOSE;
}
} }
break; break;
} }