summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2021-04-29 20:42:33 +0900
committergit <svn-admin@ruby-lang.org>2021-11-04 20:44:04 +0900
commit5f2c4e344dc2f19aab54523ae418800b08adaa61 (patch)
tree323f240b0e09ff0479ae3fec256d98bd801e621b
parenta53aab1273729c10b7e675ce8fd1a711d22c0cd0 (diff)
[ruby/net-http] Reset keep_alive timer on new connection
The last_communicated timestamp is for HTTP persistent connection, to decide whether the current TCP connection may be reused for the subsequent requests or not. Naturally, the timer must be reset if the connection is recreated since it is no longer relevant. https://github.com/ruby/net-http/commit/0a013de42d
-rw-r--r--lib/net/http.rb1
-rw-r--r--test/net/http/test_http.rb24
2 files changed, 25 insertions, 0 deletions
diff --git a/lib/net/http.rb b/lib/net/http.rb
index aaf3e3104d..552f818e5d 100644
--- a/lib/net/http.rb
+++ b/lib/net/http.rb
@@ -1055,6 +1055,7 @@ module Net #:nodoc:
write_timeout: @write_timeout,
continue_timeout: @continue_timeout,
debug_output: @debug_output)
+ @last_communicated = nil
on_connect
rescue => exception
if s
diff --git a/test/net/http/test_http.rb b/test/net/http/test_http.rb
index c859021956..b5156078a4 100644
--- a/test/net/http/test_http.rb
+++ b/test/net/http/test_http.rb
@@ -1168,6 +1168,30 @@ class TestNetHTTPKeepAlive < Test::Unit::TestCase
}
end
+ def test_keep_alive_reset_on_new_connection
+ # Using WEBrick's debug log output on accepting connection:
+ #
+ # "[2021-04-29 20:36:46] DEBUG accept: 127.0.0.1:50674\n"
+ @log_tester = nil
+ @server.logger.level = WEBrick::BasicLog::DEBUG
+
+ start {|http|
+ res = http.get('/')
+ http.keep_alive_timeout = 1
+ assert_kind_of Net::HTTPResponse, res
+ assert_kind_of String, res.body
+ http.finish
+ assert_equal 1, @log.grep(/accept/i).size
+
+ sleep 1.5
+ http.start
+ res = http.get('/')
+ assert_kind_of Net::HTTPResponse, res
+ assert_kind_of String, res.body
+ assert_equal 2, @log.grep(/accept/i).size
+ }
+ end
+
class MockSocket
attr_reader :count
def initialize(success_after: nil)