diff --git a/mongoose.c b/mongoose.c
index 82b27ddbadfc900d6d466886bab60e3b9c78cd85..b75296856a5f42a534148f13eca9ae84ad14f77d 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -2712,6 +2712,12 @@ size_t mg_websocket_write(struct mg_connection* conn, int opcode,
       free(copy);
     }
 
+    // If we send closing frame, schedule a connection to be closed after
+    // data is drained to the client.
+    if (opcode == WEBSOCKET_OPCODE_CONNECTION_CLOSE) {
+      MG_CONN_2_CONN(conn)->ns_conn->flags |= NSF_FINISHED_SENDING_DATA;
+    }
+
     return MG_CONN_2_CONN(conn)->ns_conn->send_iobuf.len;
 }