From cfc039e32e3775949dcb30100b8b49fccc85f8f9 Mon Sep 17 00:00:00 2001 From: HoneyryderChuck Date: Sun, 2 Feb 2020 09:42:33 +0100 Subject: [PATCH] handle the special case of system resolver which has to bubble up differently than all other errors --- lib/httpx/resolver/system.rb | 2 +- lib/httpx/session.rb | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/httpx/resolver/system.rb b/lib/httpx/resolver/system.rb index 1c6986a6..938ce5e6 100644 --- a/lib/httpx/resolver/system.rb +++ b/lib/httpx/resolver/system.rb @@ -34,7 +34,7 @@ module HTTPX ip_resolve(hostname) || system_resolve(hostname) || @resolver.getaddresses(hostname) - return emit_resolve_error(connection, hostname) if addresses.empty? + throw(:resolve_error, resolve_error(hostname)) if addresses.empty? emit_addresses(connection, addresses) rescue Errno::EHOSTUNREACH, *RESOLV_ERRORS => e diff --git a/lib/httpx/session.rb b/lib/httpx/session.rb index 4c753ad9..7e365b20 100644 --- a/lib/httpx/session.rb +++ b/lib/httpx/session.rb @@ -152,9 +152,14 @@ module HTTPX request_options = @options.merge(options) requests.each do |request| - connection = find_connection(request, connections, request_options) - connection.send(request) - set_request_timeout(connection, request, request_options) + error = catch(:resolve_error) do + connection = find_connection(request, connections, request_options) + connection.send(request) + set_request_timeout(connection, request, request_options) + end + next unless error.is_a?(ResolveError) + + request.emit(:response, ErrorResponse.new(request, error, options)) end responses = []