summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/socket/ipsocket.c37
-rw-r--r--test/net/http/test_http.rb6
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)
}