From 5aa8c005ec28de2aa66d4cb457b596fdf37f5e44 Mon Sep 17 00:00:00 2001 From: Bert Belder Date: Sat, 9 Jul 2011 21:31:48 +0200 Subject: [PATCH] Windows: call shutdown before closesocket to ensure graceful disconnect --- src/uv-win.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/uv-win.c b/src/uv-win.c index b92eb36b2..704b9cf21 100644 --- a/src/uv-win.c +++ b/src/uv-win.c @@ -761,6 +761,12 @@ static int uv_close_error(uv_handle_t* handle, uv_err_t e) { switch (handle->type) { case UV_TCP: tcp = (uv_tcp_t*)handle; + /* If we don't shutdown before calling closesocket, windows will */ + /* silently discard the kernel send buffer and reset the connection. */ + if (!(tcp->flags & UV_HANDLE_SHUT)) { + shutdown(tcp->socket, SD_SEND); + tcp->flags |= UV_HANDLE_SHUT; + } tcp->flags &= ~(UV_HANDLE_READING | UV_HANDLE_LISTENING); closesocket(tcp->socket); if (tcp->reqs_pending == 0) {