diff --git a/src/WebSocket.h b/src/WebSocket.h index de29b82..aa13401 100644 --- a/src/WebSocket.h +++ b/src/WebSocket.h @@ -58,6 +58,15 @@ public: /* Send or buffer a WebSocket frame, compressed or not. Returns false on increased user space backpressure. */ bool send(std::string_view message, uWS::OpCode opCode = uWS::OpCode::BINARY, bool compress = false) { + WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, + (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) + ); + + /* Skip sending and report success if we are over the limit of maxBackpressure */ + if (webSocketContextData->maxBackpressure < getBufferedAmount()) { + return true; + } + /* Transform the message to compressed domain if requested */ if (compress) { WebSocketData *webSocketData = (WebSocketData *) Super::getAsyncSocketData(); @@ -109,10 +118,7 @@ public: } /* Every successful send resets the timeout */ - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); - AsyncSocket::timeout(webSocketContextData->idleTimeout); + Super::timeout(webSocketContextData->idleTimeout); /* Return success */ return true;