mirror of
https://github.com/espressif/esp-protocols.git
synced 2025-10-02 01:20:57 +02:00
Merge pull request #729 from DazeTechnology/fix/websocket_long_stop
fix(websocket): avoid long stop time when waiting to auto-reconnect (IDFGH-14393)
This commit is contained in:
@@ -28,7 +28,7 @@ posix_event::posix_event()
|
|||||||
}
|
}
|
||||||
} // namespace asio::detail
|
} // namespace asio::detail
|
||||||
|
|
||||||
extern "C" int pause (void)
|
extern "C" int pause(void)
|
||||||
{
|
{
|
||||||
while (true) {
|
while (true) {
|
||||||
::sleep(UINT_MAX);
|
::sleep(UINT_MAX);
|
||||||
|
@@ -74,6 +74,7 @@ static const char *TAG = "websocket_client";
|
|||||||
const static int STOPPED_BIT = BIT0;
|
const static int STOPPED_BIT = BIT0;
|
||||||
const static int CLOSE_FRAME_SENT_BIT = BIT1; // Indicates that a close frame was sent by the client
|
const static int CLOSE_FRAME_SENT_BIT = BIT1; // Indicates that a close frame was sent by the client
|
||||||
// and we are waiting for the server to continue with clean close
|
// and we are waiting for the server to continue with clean close
|
||||||
|
const static int REQUESTED_STOP_BIT = BIT2; // Indicates that a client stop has been requested
|
||||||
|
|
||||||
ESP_EVENT_DEFINE_BASE(WEBSOCKET_EVENTS);
|
ESP_EVENT_DEFINE_BASE(WEBSOCKET_EVENTS);
|
||||||
|
|
||||||
@@ -477,6 +478,7 @@ static esp_err_t stop_wait_task(esp_websocket_client_handle_t client)
|
|||||||
}
|
}
|
||||||
|
|
||||||
client->run = false;
|
client->run = false;
|
||||||
|
xEventGroupSetBits(client->status_bits, REQUESTED_STOP_BIT);
|
||||||
xEventGroupWaitBits(client->status_bits, STOPPED_BIT, false, true, portMAX_DELAY);
|
xEventGroupWaitBits(client->status_bits, STOPPED_BIT, false, true, portMAX_DELAY);
|
||||||
client->state = WEBSOCKET_STATE_UNKNOW;
|
client->state = WEBSOCKET_STATE_UNKNOW;
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
@@ -1199,8 +1201,8 @@ static void esp_websocket_client_task(void *pv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (WEBSOCKET_STATE_WAIT_TIMEOUT == client->state) {
|
} else if (WEBSOCKET_STATE_WAIT_TIMEOUT == client->state) {
|
||||||
// waiting for reconnecting...
|
// waiting for reconnection or a request to stop the client...
|
||||||
vTaskDelay(client->wait_timeout_ms / 2 / portTICK_PERIOD_MS);
|
xEventGroupWaitBits(client->status_bits, REQUESTED_STOP_BIT, false, true, client->wait_timeout_ms / 2 / portTICK_PERIOD_MS);
|
||||||
} else if (WEBSOCKET_STATE_CLOSING == client->state &&
|
} else if (WEBSOCKET_STATE_CLOSING == client->state &&
|
||||||
(CLOSE_FRAME_SENT_BIT & xEventGroupGetBits(client->status_bits))) {
|
(CLOSE_FRAME_SENT_BIT & xEventGroupGetBits(client->status_bits))) {
|
||||||
ESP_LOGD(TAG, " Waiting for TCP connection to be closed by the server");
|
ESP_LOGD(TAG, " Waiting for TCP connection to be closed by the server");
|
||||||
@@ -1262,7 +1264,7 @@ esp_err_t esp_websocket_client_start(esp_websocket_client_handle_t client)
|
|||||||
ESP_LOGE(TAG, "Error create websocket task");
|
ESP_LOGE(TAG, "Error create websocket task");
|
||||||
return ESP_FAIL;
|
return ESP_FAIL;
|
||||||
}
|
}
|
||||||
xEventGroupClearBits(client->status_bits, STOPPED_BIT | CLOSE_FRAME_SENT_BIT);
|
xEventGroupClearBits(client->status_bits, STOPPED_BIT | CLOSE_FRAME_SENT_BIT | REQUESTED_STOP_BIT);
|
||||||
ESP_LOGI(TAG, "Started");
|
ESP_LOGI(TAG, "Started");
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
@@ -1331,6 +1333,7 @@ static esp_err_t esp_websocket_client_close_with_optional_body(esp_websocket_cli
|
|||||||
|
|
||||||
// If could not close gracefully within timeout, stop the client and disconnect
|
// If could not close gracefully within timeout, stop the client and disconnect
|
||||||
client->run = false;
|
client->run = false;
|
||||||
|
xEventGroupSetBits(client->status_bits, REQUESTED_STOP_BIT);
|
||||||
xEventGroupWaitBits(client->status_bits, STOPPED_BIT, false, true, portMAX_DELAY);
|
xEventGroupWaitBits(client->status_bits, STOPPED_BIT, false, true, portMAX_DELAY);
|
||||||
client->state = WEBSOCKET_STATE_UNKNOW;
|
client->state = WEBSOCKET_STATE_UNKNOW;
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
|
@@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
extern int __real_mbedtls_ssl_handshake_step(mbedtls_ssl_context *ssl);
|
extern int __real_mbedtls_ssl_handshake_step(mbedtls_ssl_context *ssl);
|
||||||
|
|
||||||
int __wrap_mbedtls_ssl_handshake_step( mbedtls_ssl_context *ssl )
|
int __wrap_mbedtls_ssl_handshake_step(mbedtls_ssl_context *ssl)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user