5#if defined(USE_SOCKET_IMPL_LWIP_TCP) || defined(USE_SOCKET_IMPL_LWIP_SOCKETS) || defined(USE_SOCKET_IMPL_BSD_SOCKETS)
13#if defined(ESPHOME_THREAD_MULTI_NO_ATOMICS)
14#define IPV4_RESOLVE_VOLATILE_EPOCH
15#elif defined(ESPHOME_THREAD_SINGLE)
16#define IPV4_RESOLVE_VOLATILE
18#define IPV4_RESOLVE_ATOMIC_STATE
22#if !defined(USE_HOST) && !defined(USE_ZEPHYR)
23#include "lwip/ip_addr.h"
49 void start(
const char *host, uint16_t port,
const char *tag);
52#if !defined(USE_HOST) && !defined(USE_ZEPHYR)
53 static void dns_found(
const char *name,
const ip_addr_t *addr,
void *arg);
54#if defined(IPV4_RESOLVE_VOLATILE_EPOCH)
58 uint8_t state_()
const {
59#if defined(IPV4_RESOLVE_ATOMIC_STATE)
60 return this->state_word_.load();
62 return this->state_word_;
66#if defined(IPV4_RESOLVE_ATOMIC_STATE)
67 return this->addr_word_.load();
69 return this->addr_word_;
72 void set_state_(uint8_t
state) {
73#if defined(IPV4_RESOLVE_ATOMIC_STATE)
74 this->state_word_.store(
state);
76 this->state_word_ =
state;
80#if defined(IPV4_RESOLVE_ATOMIC_STATE)
81 this->addr_word_.store(addr);
83 this->addr_word_ = addr;
86 const char *tag_{
nullptr};
87#if defined(IPV4_RESOLVE_ATOMIC_STATE)
88 std::atomic<uint32_t> addr_word_{0};
90#elif defined(IPV4_RESOLVE_VOLATILE_EPOCH)
One IPv4 literal or hostname. Must outlive a pending lookup.
void start(const char *host, uint16_t port, const char *tag)
Resolve host; tag names the failure log.
bool consume_failure()
Drop a failed lookup so the next start() tries again.
static constexpr uint8_t STATE_RESOLVED
static constexpr uint8_t STATE_RESOLVING
socklen_t to_sockaddr(struct sockaddr *dest, socklen_t destlen, uint16_t port) const
Write the stored address into dest. Returns 0 until ready() is true.
static constexpr uint8_t STATE_IDLE
static constexpr uint8_t STATE_FAILED
static constexpr uint8_t STATE_PUBLISHING
void forget()
Drop the stored address so the next start() resolves again.