diff --git a/src/WebSocket.h b/src/WebSocket.h index 682ae11..62c39fe 100644 --- a/src/WebSocket.h +++ b/src/WebSocket.h @@ -94,11 +94,17 @@ public: (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) ); + /* If we already reached the max backpressure and started a deferred close, reject all sends */ + if (webSocketContextData->closeOnBackpressureLimit == 2) { + return DROPPED; + } + /* Skip sending and report success if we are over the limit of maxBackpressure */ if (webSocketContextData->maxBackpressure && webSocketContextData->maxBackpressure < getBufferedAmount()) { /* Also defer a close if we should */ - if (webSocketContextData->closeOnBackpressureLimit) { + if (webSocketContextData->closeOnBackpressureLimit == 1) { us_socket_shutdown_read(SSL, (us_socket_t *) this); + webSocketContextData->closeOnBackpressureLimit = 2; } return DROPPED; } diff --git a/src/WebSocketContextData.h b/src/WebSocketContextData.h index 8c41894..84f0ca3 100644 --- a/src/WebSocketContextData.h +++ b/src/WebSocketContextData.h @@ -73,7 +73,7 @@ public: /* There needs to be a maxBackpressure which will force close everything over that limit */ size_t maxBackpressure = 0; - bool closeOnBackpressureLimit; + unsigned char closeOnBackpressureLimit; /* 0, 1 (or 2 internally) */ bool resetIdleTimeoutOnSend; bool sendPingsAutomatically;