From a4e81dc17601b83a46a9fe68cf44a2d938644942 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 10 Dec 2025 03:09:47 +0100 Subject: [PATCH] [socket] Wake loop immediately on socket data for ESP8266 --- esphome/components/socket/lwip_raw_tcp_impl.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/esphome/components/socket/lwip_raw_tcp_impl.cpp b/esphome/components/socket/lwip_raw_tcp_impl.cpp index e57af91b77..72009bcc51 100644 --- a/esphome/components/socket/lwip_raw_tcp_impl.cpp +++ b/esphome/components/socket/lwip_raw_tcp_impl.cpp @@ -14,6 +14,10 @@ #include "esphome/core/helpers.h" #include "esphome/core/log.h" +#ifdef USE_ESP8266 +#include // For esp_schedule() +#endif + namespace esphome { namespace socket { @@ -473,6 +477,11 @@ class LWIPRawImpl : public Socket { } else { pbuf_cat(rx_buf_, pb); } +#ifdef USE_ESP8266 + // Wake the main loop immediately so it can process the received data. + // esp_schedule() wakes the context blocked in delay() -> esp_suspend(). + esp_schedule(); +#endif return ERR_OK; } @@ -633,6 +642,10 @@ class LWIPRawListenImpl : public LWIPRawImpl { sock->init(); accepted_sockets_[accepted_socket_count_++] = std::move(sock); LWIP_LOG("Accepted connection, queue size: %d", accepted_socket_count_); +#ifdef USE_ESP8266 + // Wake the main loop immediately so it can accept the new connection. + esp_schedule(); +#endif return ERR_OK; }