diff --git a/lualib/skynet/socket.lua b/lualib/skynet/socket.lua index 330330e7..e467d2a1 100644 --- a/lualib/skynet/socket.lua +++ b/lualib/skynet/socket.lua @@ -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. diff --git a/skynet-src/socket_server.c b/skynet-src/socket_server.c index 2595bca0..694e797f 100644 --- a/skynet-src/socket_server.c +++ b/skynet-src/socket_server.c @@ -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;