diff --git a/lib/net/http.rb b/lib/net/http.rb index bfd0001422..c24c4df7cc 100644 --- a/lib/net/http.rb +++ b/lib/net/http.rb @@ -1505,7 +1505,13 @@ def transport_request(req) res = catch(:response) { req.exec @socket, @curr_http_version, edit_path(req.path) begin - res = HTTPResponse.read_new(@socket) + if Net::HTTP::Post === req && RUBY_PLATFORM[/mingw|mswin/] + Timeout.timeout(@write_timeout, Net::WriteTimeout) { + res = HTTPResponse.read_new(@socket) + } + else + res = HTTPResponse.read_new(@socket) + end res.decode_content = req.decode_content end while res.kind_of?(HTTPInformation) @@ -1518,7 +1524,7 @@ def transport_request(req) } rescue Net::OpenTimeout raise - rescue Net::ReadTimeout, IOError, EOFError, + rescue Net::WriteTimeout, Net::ReadTimeout, IOError, EOFError, Errno::ECONNRESET, Errno::ECONNABORTED, Errno::EPIPE, # avoid a dependency on OpenSSL defined?(OpenSSL::SSL) ? OpenSSL::SSL::SSLError : IOError,