mirror of
https://github.com/esphome/esphome.git
synced 2025-10-27 05:03:48 +00:00
[core] handle mixed IP and DNS addresses correctly in resolve_ip_address
do not raise error if some addresses are IPs and the mDNS / DNS resolution fails for others fix: #11501
This commit is contained in:
@@ -250,34 +250,42 @@ def resolve_ip_address(
|
|||||||
|
|
||||||
# If we have uncached hosts (only non-IP hostnames), resolve them
|
# If we have uncached hosts (only non-IP hostnames), resolve them
|
||||||
if uncached_hosts:
|
if uncached_hosts:
|
||||||
from esphome.resolver import AsyncResolver
|
from esphome.core import EsphomeError
|
||||||
|
|
||||||
resolver = AsyncResolver(uncached_hosts, port)
|
try:
|
||||||
addr_infos = resolver.resolve()
|
from esphome.resolver import AsyncResolver
|
||||||
# Convert aioesphomeapi AddrInfo to our format
|
|
||||||
for addr_info in addr_infos:
|
resolver = AsyncResolver(uncached_hosts, port)
|
||||||
sockaddr = addr_info.sockaddr
|
addr_infos = resolver.resolve()
|
||||||
if addr_info.family == socket.AF_INET6:
|
# Convert aioesphomeapi AddrInfo to our format
|
||||||
# IPv6
|
for addr_info in addr_infos:
|
||||||
sockaddr_tuple = (
|
sockaddr = addr_info.sockaddr
|
||||||
sockaddr.address,
|
if addr_info.family == socket.AF_INET6:
|
||||||
sockaddr.port,
|
# IPv6
|
||||||
sockaddr.flowinfo,
|
sockaddr_tuple = (
|
||||||
sockaddr.scope_id,
|
sockaddr.address,
|
||||||
|
sockaddr.port,
|
||||||
|
sockaddr.flowinfo,
|
||||||
|
sockaddr.scope_id,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# IPv4
|
||||||
|
sockaddr_tuple = (sockaddr.address, sockaddr.port)
|
||||||
|
|
||||||
|
res.append(
|
||||||
|
(
|
||||||
|
addr_info.family,
|
||||||
|
addr_info.type,
|
||||||
|
addr_info.proto,
|
||||||
|
"", # canonname
|
||||||
|
sockaddr_tuple,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
except EsphomeError as err:
|
||||||
|
if len(res) > 0:
|
||||||
|
_LOGGER.warning(err)
|
||||||
else:
|
else:
|
||||||
# IPv4
|
raise err
|
||||||
sockaddr_tuple = (sockaddr.address, sockaddr.port)
|
|
||||||
|
|
||||||
res.append(
|
|
||||||
(
|
|
||||||
addr_info.family,
|
|
||||||
addr_info.type,
|
|
||||||
addr_info.proto,
|
|
||||||
"", # canonname
|
|
||||||
sockaddr_tuple,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
# Sort by preference
|
# Sort by preference
|
||||||
res.sort(key=addr_preference_)
|
res.sort(key=addr_preference_)
|
||||||
|
|||||||
Reference in New Issue
Block a user