B:BD[
3.4431] → [
3.4431:4646]
%% Check if any connected peer has this address
lists:any(
fun({_ConnPid, PeerMeta}) ->
maps:get(address, PeerMeta, undefined) =:= Address
end,
maps:to_list(Peers)
).
%% Address is "Host:Port" string from DB
%% Peers values have address as {IPTuple, Port} usually
%% 1. Parse and resolve the persistent address
Target = case string:split(Address, ":") of
[HostStr, PortStr] ->
try
Port = list_to_integer(PortStr),
case inet:getaddr(HostStr, inet) of
{ok, IP} -> {IP, Port};
_ -> undefined
end
catch
_:_ -> undefined
end;
_ -> undefined
end,
case Target of
undefined -> false;
TargetAddr ->
%% 2. Check if any connected peer matches this resolved address
lists:any(
fun({_ConnPid, PeerMeta}) ->
case maps:get(address, PeerMeta, undefined) of
{IP, Port} -> {IP, Port} =:= TargetAddr;
_ -> false
end
end,
maps:to_list(Peers)
)
end.