From 030d113710a8b4bac4be088790e5c2fac9e1387a Mon Sep 17 00:00:00 2001 From: Alex Hultman Date: Sun, 29 Aug 2021 21:49:18 +0200 Subject: [PATCH] Fix WebSocket::close being called in close handler (#1320) --- src/WebSocket.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/WebSocket.h b/src/WebSocket.h index a7e6aaa..389cae5 100644 --- a/src/WebSocket.h +++ b/src/WebSocket.h @@ -53,8 +53,19 @@ public: using Super::getRemoteAddressAsText; using Super::getNativeHandle; - /* Simple, immediate close of the socket. Emits close event */ - using Super::close; + /* WebSocket close cannot be an alias to AsyncSocket::close since + * we need to check first if it was shut down by remote peer */ + us_socket_t *close() { + if (us_socket_is_closed(SSL, (us_socket_t *) this)) { + return nullptr; + } + WebSocketData *webSocketData = (WebSocketData *) Super::getAsyncSocketData(); + if (webSocketData->isShuttingDown) { + return nullptr; + } + + return us_socket_close(SSL, (us_socket_t *) this, 0, nullptr); + } enum SendStatus : int { BACKPRESSURE,