fix halfclose bug, See detail #1358

This commit is contained in:
Cloud Wu
2021-03-09 17:45:03 +08:00
parent 0d9bfcb721
commit 600a64327e
2 changed files with 5 additions and 4 deletions

View File

@@ -269,8 +269,8 @@ function socket.close(id)
if s == nil then
return
end
driver.close(id)
if s.connected then
driver.close(id)
if s.co then
-- reading this socket on another coroutine, so don't shutdown (clear the buffer) immediately
-- wait reading coroutine read the buffer.

View File

@@ -1024,7 +1024,7 @@ send_socket(struct socket_server *ss, struct request_send * request, struct sock
so.free_func((void *)request->buffer);
return -1;
}
if (send_buffer_empty(s) && type == SOCKET_TYPE_CONNECTED) {
if (send_buffer_empty(s)) {
if (s->protocol == PROTOCOL_TCP) {
append_sendbuffer(ss, s, request); // add to high priority list, even priority == PRIORITY_LOW
} else {
@@ -1148,8 +1148,9 @@ close_socket(struct socket_server *ss, struct request_close *request, struct soc
int r = shutdown_read ? -1 : SOCKET_CLOSE;
force_close(ss,s,&l,result);
return r;
} else if (!shutdown_read) {
s->closing = true;
}
s->closing = true;
if (!shutdown_read) {
// don't read socket after socket.close()
close_read(ss, s, result);
return SOCKET_CLOSE;