From 51a942d095b23ad6a871ccf24c62a62f4ba0a8ff Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Mon, 22 Feb 2021 09:41:59 +0800 Subject: [PATCH] bugfix: disable fd reading flag after shutdown read --- skynet-src/socket_server.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/skynet-src/socket_server.c b/skynet-src/socket_server.c index bb38a330..44c0d9ec 100644 --- a/skynet-src/socket_server.c +++ b/skynet-src/socket_server.c @@ -1141,6 +1141,8 @@ resume_socket(struct socket_server *ss, struct request_resumepause *request, str result->data = "invalid socket"; return SOCKET_ERR; } + if (s->closing) + return -1; struct socket_lock l; socket_lock_init(s, &l); if (enable_read(ss, s, true)) { @@ -1385,14 +1387,18 @@ forward_message_tcp(struct socket_server *ss, struct socket *s, struct socket_lo FREE(buffer); if (nomore_sending_data(s)) { force_close(ss,s,l,result); - } else { + } else { ATOM_STORE(&s->type , SOCKET_TYPE_HALFCLOSE_READ); - shutdown(s->fd, SHUT_RD); + if (!s->closing) { + shutdown(s->fd, SHUT_RD); + s->closing = true; + } + enable_read(ss, s, false); } return SOCKET_CLOSE; } - if (ATOM_LOAD(&s->type) == SOCKET_TYPE_HALFCLOSE_READ) { + if (s->closing) { // discard recv data FREE(buffer); return -1;