adding TCP#addresses?, which drops on-the-fly expired entries, and therefore makes possible to DNS query for persistent connections

This commit is contained in:
HoneyryderChuck 2025-08-24 01:44:52 +01:00
parent cfce76bd8b
commit b5775d73c8
7 changed files with 24 additions and 4 deletions

View File

@ -60,7 +60,7 @@ module WebMock
connection.once(:unmock_connection) do
next unless connection.current_session == self
unless connection.addresses
unless connection.addresses?
# reset Happy Eyeballs, fail early
connection.sibling = nil

View File

@ -122,6 +122,10 @@ module HTTPX
@io && @io.addresses
end
def addresses?
@io && @io.addresses?
end
def match?(uri, options)
return false if !used? && (@state == :closing || @state == :closed)

View File

@ -30,7 +30,7 @@ module HTTPX
raise Error, "Given IO objects do not match the request authority" unless @io
_, _, _, ip = @io.addr
@ip = Resolver::Entry(ip)
@ip = Resolver::Entry.new(ip)
@addresses << @ip
@keep_open = true
@state = :connected
@ -57,6 +57,13 @@ module HTTPX
end
end
# eliminates expired entries and returns whether there are still any left.
def addresses?
@addresses.delete_if(&:expired?)
@addresses.any?
end
def to_io
@io.to_io
end
@ -165,7 +172,7 @@ module HTTPX
# do not mess with external sockets
return false if @options.io
return true unless @addresses
return true if @addresses.empty?
resolver_addresses = Resolver.nolookup_resolve(@hostname)

View File

@ -51,6 +51,11 @@ module HTTPX
IO::WaitReadable
end
# the path is always explicitly passed, so no point in resolving.
def addresses?
true
end
def expired?
false
end

View File

@ -370,7 +370,7 @@ module HTTPX
end
def resolve_connection(connection, selector)
if connection.addresses || connection.open?
if connection.addresses? || connection.open?
#
# there are two cases in which we want to activate initialization of
# connection immediately:

View File

@ -58,6 +58,8 @@ module HTTPX
def send: (Request request) -> void
def addresses?: () -> boolish
def match?: (URI::Generic uri, Options options) -> bool
def expired?: () -> boolish

View File

@ -31,6 +31,8 @@ module HTTPX
def add_addresses: (Array[Resolver::Entry] addrs) -> void
def addresses?: () -> bool
def to_io: () -> IO
def protocol: () -> String