Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Net::HTTP timeouts not respected depending on how it's used?
Xavi Caballe
4/8/2008 7:43:00 PM
In my Mac with Leopard, this doesn't respect the 2 seconds timeout
that's set in the code...
require 'net/http'
require 'uri'
url = URI.parse("
http://222.222.3...
)
req = Net::HTTP::Get.new(url.request_uri)
res = Net::HTTP.start(url.host, url.port) { |http|
http.open_timeout = 2
http.read_timeout = 2
http.request(req)
}
puts res.body
It times out, but after 1 MINUTE, with this message...
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:564:in
`initialize': Operation timed out - connect(2) (Errno::ETIMEDOUT)
However, the following code works (i.e. it times out after the 2
seconds)...
require 'net/http'
site = Net::HTTP.new("
http://222.222.3...
)
site.open_timeout = 2
site.read_timeout = 2
res = site.get2(URI.escape("/"))
puts res.body
After the 2 seconds I get this message
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:54:in
`open': execution expired (Timeout::Error)
Do you know why the timeout is not respected in the first case? (I don't
understand)
Thanks in advance.
Xavi
--
Posted via
http://www.ruby-...
.
1 Answer
Xavier Noria
4/8/2008 9:00:00 PM
0
On Apr 8, 2008, at 21:42 , Xavi Caballe wrote:
> In my Mac with Leopard, this doesn't respect the 2 seconds timeout
> that's set in the code...
>
> require 'net/http'
> require 'uri'
>
> url = URI.parse("
http://222.222.3...
)
> req = Net::HTTP::Get.new(url.request_uri)
> res = Net::HTTP.start(url.host, url.port) { |http|
> http.open_timeout = 2
> http.read_timeout = 2
> http.request(req)
> }
> puts res.body
>
> It times out, but after 1 MINUTE, with this message...
> /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/
> 1.8/net/http.rb:564:in
> `initialize': Operation timed out - connect(2) (Errno::ETIMEDOUT)
Ei Xavi!
I've traced the code:
Class method start instantiates a new http object
and invokes start on it
Instance method start calls do_start, which in turn
invokes connect, and *then* yields
So by the time the block is executed the connection has already been
attempted with default (nil) open timeout value.
With the current implementation you can't tweak the open timeout and
use the block form, you need to go with the alternative you already
know it works.
-- fxn
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Net::HTTP timeouts not respected depending on how it's used?
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password