mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-04 00:00:37 -04:00
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:
parent
cfce76bd8b
commit
b5775d73c8
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -31,6 +31,8 @@ module HTTPX
|
||||
|
||||
def add_addresses: (Array[Resolver::Entry] addrs) -> void
|
||||
|
||||
def addresses?: () -> bool
|
||||
|
||||
def to_io: () -> IO
|
||||
|
||||
def protocol: () -> String
|
||||
|
Loading…
x
Reference in New Issue
Block a user