diff --git a/src/WebSockets.cpp b/src/WebSockets.cpp index 8c8ef82..08c3b99 100644 --- a/src/WebSockets.cpp +++ b/src/WebSockets.cpp @@ -645,7 +645,11 @@ bool WebSockets::readCb(WSclient_t * client, uint8_t * out, size_t n, WSreadWait //DEBUG_WEBSOCKETS("Receive %d left %d!\n", len, n); } if (n > 0) { - WEBSOCKETS_YIELD(); + if (len <= 0) { + WEBSOCKETS_YIELD_MORE(); + } else { + WEBSOCKETS_YIELD(); + } } } if(cb) { @@ -698,9 +702,7 @@ size_t WebSockets::write(WSclient_t * client, uint8_t * out, size_t n) { } else { DEBUG_WEBSOCKETS("WS write %d failed left %d!\n", len, n); } - if (n > 0) { - WEBSOCKETS_YIELD(); - } + WEBSOCKETS_YIELD_MORE(); } WEBSOCKETS_YIELD(); return total; diff --git a/src/WebSockets.h b/src/WebSockets.h index 5112d38..a2ae1e4 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -68,7 +68,7 @@ #define WEBSOCKETS_YIELD_MORE() delay(1) #elif defined(ESP32) #define WEBSOCKETS_YIELD() yield() -#define WEBSOCKETS_YIELD_MORE() delay(1) +#define WEBSOCKETS_YIELD_MORE() delay(5) #endif #elif defined(STM32_DEVICE) @@ -89,6 +89,7 @@ #endif #define WEBSOCKETS_TCP_TIMEOUT (5000) +#define WEBSOCKETS_TCP_TIMEOUT_SEC (5) #define NETWORK_ESP8266_ASYNC (0) #define NETWORK_ESP8266 (1) diff --git a/src/WebSocketsClient.cpp b/src/WebSocketsClient.cpp index 64b3f64..32b735c 100644 --- a/src/WebSocketsClient.cpp +++ b/src/WebSocketsClient.cpp @@ -762,7 +762,7 @@ void WebSocketsClient::connectedCb() { #if(WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC) // set Timeout for readBytesUntil and readStringUntil - _client.tcp->setTimeout(WEBSOCKETS_TCP_TIMEOUT); + _client.tcp->setTimeout(WEBSOCKETS_TCP_TIMEOUT_SEC); #endif #if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index c78fffa..c2e6ab0 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -367,13 +367,16 @@ void WebSocketsServer::disconnect(void) { * disconnect one client * @param num uint8_t client id */ -void WebSocketsServer::disconnect(uint8_t num) { +void WebSocketsServer::disconnect(uint8_t num, bool immediate) { if(num >= WEBSOCKETS_SERVER_CLIENT_MAX) { return; } WSclient_t * client = &_clients[num]; if(clientIsConnected(client)) { - WebSockets::clientDisconnect(client, 1000); + if (immediate) + clientDisconnect(client); + else + WebSockets::clientDisconnect(client, 1000); } } @@ -473,7 +476,7 @@ bool WebSocketsServer::newClient(WEBSOCKETS_NETWORK_CLASS * TCPclient) { #endif #if(WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC) // set Timeout for readBytesUntil and readStringUntil - client->tcp->setTimeout(WEBSOCKETS_TCP_TIMEOUT); + client->tcp->setTimeout(WEBSOCKETS_TCP_TIMEOUT_SEC); #endif client->status = WSC_HEADER; #if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) diff --git a/src/WebSocketsServer.h b/src/WebSocketsServer.h index 27adf09..316fde2 100644 --- a/src/WebSocketsServer.h +++ b/src/WebSocketsServer.h @@ -85,7 +85,7 @@ class WebSocketsServer : protected WebSockets { bool broadcastPing(String & payload); void disconnect(void); - void disconnect(uint8_t num); + void disconnect(uint8_t num, bool immediate = false); void setAuthorization(const char * user, const char * password); void setAuthorization(const char * auth);