From 2b092e0db47320db0414fa26e83fd33871dd7f9b Mon Sep 17 00:00:00 2001 From: Eldar Hauge Torkelsen Date: Tue, 23 Jan 2024 14:58:27 +0100 Subject: [PATCH 1/2] fix(websocket): Continue waiting for TCP connection to be closed Prevents an issue where WEBSOCKET_EVENT_CLOSED is not sent after websocket is closed. --- components/esp_websocket_client/esp_websocket_client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_websocket_client/esp_websocket_client.c b/components/esp_websocket_client/esp_websocket_client.c index 3badfe76f9..2361c8cfc1 100644 --- a/components/esp_websocket_client/esp_websocket_client.c +++ b/components/esp_websocket_client/esp_websocket_client.c @@ -1040,7 +1040,7 @@ static void esp_websocket_client_task(void *pv) int ret = esp_transport_ws_poll_connection_closed(client->transport, 1000); if (ret == 0) { // still waiting - break; + continue; } if (ret < 0) { ESP_LOGW(TAG, "Connection terminated while waiting for clean TCP close"); From d85311880d8b32ef8419e87faaf7569f6414991c Mon Sep 17 00:00:00 2001 From: Eldar Hauge Torkelsen Date: Mon, 29 Jan 2024 07:50:55 +0100 Subject: [PATCH 2/2] fix(websocket): Close websocket and dispatch event if server does not close within a reasonable amount of time. --- components/esp_websocket_client/esp_websocket_client.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/components/esp_websocket_client/esp_websocket_client.c b/components/esp_websocket_client/esp_websocket_client.c index 2361c8cfc1..1dcf364e79 100644 --- a/components/esp_websocket_client/esp_websocket_client.c +++ b/components/esp_websocket_client/esp_websocket_client.c @@ -1039,10 +1039,9 @@ static void esp_websocket_client_task(void *pv) ESP_LOGD(TAG, " Waiting for TCP connection to be closed by the server"); int ret = esp_transport_ws_poll_connection_closed(client->transport, 1000); if (ret == 0) { - // still waiting - continue; - } - if (ret < 0) { + ESP_LOGW(TAG, "Did not get TCP close within expected delay"); + + } else if (ret < 0) { ESP_LOGW(TAG, "Connection terminated while waiting for clean TCP close"); } client->run = false;