mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-10-06 00:02:08 -04:00
added support for resolve timeout in the system resolver
This commit is contained in:
parent
c17a260fe8
commit
4641797a7f
@ -158,10 +158,18 @@ module HTTPX
|
||||
def async_resolve(connection, hostname, scheme)
|
||||
families = connection.options.ip_families
|
||||
log { "resolver: query for #{hostname}" }
|
||||
resolve_timeout = @timeouts[connection.origin.host].first
|
||||
|
||||
Thread.start do
|
||||
Thread.current.report_on_exception = false
|
||||
begin
|
||||
addrs = __addrinfo_resolve(hostname, scheme)
|
||||
addrs = if resolve_timeout
|
||||
Timeout.timeout(resolve_timeout) do
|
||||
__addrinfo_resolve(hostname, scheme)
|
||||
end
|
||||
else
|
||||
__addrinfo_resolve(hostname, scheme)
|
||||
end
|
||||
addrs = addrs.sort_by(&:afamily).group_by(&:afamily)
|
||||
families.each do |family|
|
||||
addresses = addrs[family]
|
||||
@ -174,6 +182,15 @@ module HTTPX
|
||||
@pipe_write.putc(DONE) unless @pipe_write.closed?
|
||||
end
|
||||
end
|
||||
rescue Timeout::Error => e
|
||||
ex = ResolveTimeoutError.new(resolve_timeout, e.message)
|
||||
ex.set_backtrace(ex.backtrace)
|
||||
@pipe_mutex.synchronize do
|
||||
families.each do |family|
|
||||
@ips.unshift([family, connection, ex])
|
||||
@pipe_write.putc(ERROR) unless @pipe_write.closed?
|
||||
end
|
||||
end
|
||||
rescue StandardError => e
|
||||
@pipe_mutex.synchronize do
|
||||
families.each do |family|
|
||||
|
Loading…
x
Reference in New Issue
Block a user