mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[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:
parent
a53aab1273
commit
5f2c4e344d
2 changed files with 25 additions and 0 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue