diff --git a/lib/net/http.rb b/lib/net/http.rb index 61c7a774..fbaf11d9 100644 --- a/lib/net/http.rb +++ b/lib/net/http.rb @@ -1047,6 +1047,7 @@ def connect 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 c8590219..b5156078 100644 --- a/test/net/http/test_http.rb +++ b/test/net/http/test_http.rb @@ -1168,6 +1168,30 @@ def test_keep_alive_get_auto_retry } 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)