[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
This commit is contained in:
Kazuki Yamaguchi 2021-04-29 20:42:33 +09:00 коммит произвёл git
Родитель a53aab1273
Коммит 5f2c4e344d
2 изменённых файлов: 25 добавлений и 0 удалений

Просмотреть файл

@ -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

Просмотреть файл

@ -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)