diff --git a/esphome/components/socket/bsd_sockets_impl.cpp b/esphome/components/socket/bsd_sockets_impl.cpp index ac4083ae2d..824a4bea45 100644 --- a/esphome/components/socket/bsd_sockets_impl.cpp +++ b/esphome/components/socket/bsd_sockets_impl.cpp @@ -34,6 +34,7 @@ int BSDSocketImpl::close() { #ifdef USE_LWIP_FAST_SELECT if (this->loop_monitored_) { App.unregister_socket(this->cached_sock_); + this->cached_sock_ = nullptr; } #else if (this->loop_monitored_) { diff --git a/esphome/components/socket/lwip_sockets_impl.cpp b/esphome/components/socket/lwip_sockets_impl.cpp index 810e6b090d..4c68da2aaf 100644 --- a/esphome/components/socket/lwip_sockets_impl.cpp +++ b/esphome/components/socket/lwip_sockets_impl.cpp @@ -34,6 +34,7 @@ int LwIPSocketImpl::close() { #ifdef USE_LWIP_FAST_SELECT if (this->loop_monitored_) { App.unregister_socket(this->cached_sock_); + this->cached_sock_ = nullptr; } #else if (this->loop_monitored_) { diff --git a/esphome/components/socket/socket.cpp b/esphome/components/socket/socket.cpp index 3e34b7c0bf..54111892a0 100644 --- a/esphome/components/socket/socket.cpp +++ b/esphome/components/socket/socket.cpp @@ -12,7 +12,7 @@ namespace esphome::socket { // Shared ready() implementation for fd-based socket implementations (BSD and LWIP sockets). // Uses cached lwip_sock pointer for direct rcvevent read — no fd lookup overhead. bool socket_ready(struct lwip_sock *cached_sock, bool loop_monitored) { - return !loop_monitored || esphome_lwip_socket_has_data(cached_sock); + return !loop_monitored || (cached_sock != nullptr && esphome_lwip_socket_has_data(cached_sock)); } #elif defined(USE_SOCKET_SELECT_SUPPORT) // Shared ready() implementation for fd-based socket implementations (BSD and LWIP sockets).