diff options
-rw-r--r-- | ext/socket/ipsocket.c | 37 | ||||
-rw-r--r-- | test/net/http/test_http.rb | 6 |
2 files changed, 21 insertions, 22 deletions
diff --git a/ext/socket/ipsocket.c b/ext/socket/ipsocket.c index f3c00b518d..89adf75a55 100644 --- a/ext/socket/ipsocket.c +++ b/ext/socket/ipsocket.c @@ -572,7 +572,6 @@ init_fast_fallback_inetsock_internal(VALUE v) struct wait_fast_fallback_arg wait_arg; struct timeval *ends_at = NULL; struct timeval delay = (struct timeval){ -1, -1 }; - wait_arg.nfds = 0; wait_arg.writefds = NULL; wait_arg.status = 0; @@ -916,6 +915,7 @@ init_fast_fallback_inetsock_internal(VALUE v) wait_arg.delay = NULL; } + wait_arg.nfds = 0; if (arg->connection_attempt_fds_size) { FD_ZERO(wait_arg.writefds); int n = 0; @@ -995,25 +995,24 @@ init_fast_fallback_inetsock_internal(VALUE v) last_error.type = SYSCALL_ERROR; last_error.ecode = errno; - if (any_addrinfos(&resolution_store) || - in_progress_fds(arg->connection_attempt_fds_size) || - !resolution_store.is_all_finised) { - if (!in_progress_fds(arg->connection_attempt_fds_size)) { - user_specified_connect_timeout_at = NULL; - } - } else { - if (local_status < 0) { - host = arg->local.host; - serv = arg->local.serv; - } else { - host = arg->remote.host; - serv = arg->remote.serv; - } - if (last_error.type == RESOLUTION_ERROR) { - rsock_raise_resolution_error(syscall, last_error.ecode); - } else { - rsock_syserr_fail_host_port(last_error.ecode, syscall, host, serv); + if (!in_progress_fds(arg->connection_attempt_fds_size)) { + if (any_addrinfos(&resolution_store)) { + connection_attempt_delay_expires_at = NULL; + } else if (resolution_store.is_all_finised) { + if (local_status < 0) { + host = arg->local.host; + serv = arg->local.serv; + } else { + host = arg->remote.host; + serv = arg->remote.serv; + } + if (last_error.type == RESOLUTION_ERROR) { + rsock_raise_resolution_error(syscall, last_error.ecode); + } else { + rsock_syserr_fail_host_port(last_error.ecode, syscall, host, serv); + } } + user_specified_connect_timeout_at = NULL; } /* check for hostname resolution */ diff --git a/test/net/http/test_http.rb b/test/net/http/test_http.rb index 25fdeadbd2..a49cc87e8d 100644 --- a/test/net/http/test_http.rb +++ b/test/net/http/test_http.rb @@ -568,8 +568,8 @@ module TestNetHTTP_version_1_1_methods conn.open_timeout = EnvUtil.apply_timeout_scale(0.1) th = Thread.new do - err = !windows? ? [Net::WriteTimeout, Net::OpenTimeout] : Net::ReadTimeout - assert_raise(*err) do + err = !windows? ? Net::WriteTimeout : Net::ReadTimeout + assert_raise(err) do assert_warning(/Content-Type did not set/) do conn.post('/', "a"*50_000_000) end @@ -600,7 +600,7 @@ module TestNetHTTP_version_1_1_methods req.body_stream = StringIO.new(data) th = Thread.new do - assert_raise(Net::WriteTimeout, Net::OpenTimeout) { conn.request(req) } + assert_raise(Net::WriteTimeout) { conn.request(req) } end assert th.join(10) } |