W
William E. Rubin
I just made a script that fetches certain web pages, using Net::HTTP,
over and over in a loop. Everything worked fine, for about 5000
iterations, but then the following error was thrown (this is in Ruby
1.8.3):
C:/Ruby/lib/ruby/1.8/net/protocol.rb:133:in `sysread'
C:/Ruby/lib/ruby/1.8/net/protocol.rb:133:in `rbuf_fill'
C:/Ruby/lib/ruby/1.8/timeout.rb:45:in `timeout'
C:/Ruby/lib/ruby/1.8/timeout.rb:62:in `timeout'
C:/Ruby/lib/ruby/1.8/net/protocol.rb:132:in `rbuf_fill'
C:/Ruby/lib/ruby/1.8/net/protocol.rb:116:in `readuntil'
C:/Ruby/lib/ruby/1.8/net/protocol.rb:126:in `readline'
C:/Ruby/lib/ruby/1.8/net/http.rb:1988:in `read_status_line'
C:/Ruby/lib/ruby/1.8/net/http.rb:1977:in `read_new'
C:/Ruby/lib/ruby/1.8/net/http.rb:1046:in `request'
C:/Ruby/lib/ruby/1.8/net/http.rb:944:in `request_get'
The appropriate part in protocol.rb is this:
def rbuf_fill
timeout(@read_timeout) {
@rbuf << @io.sysread(1024)
}
end
So sysread suddenly considers "1024" to be an invalid number of bytes
to read? After having considered it valid on each of the previous 5000
iterations?
Any clues? Thanks.
over and over in a loop. Everything worked fine, for about 5000
iterations, but then the following error was thrown (this is in Ruby
1.8.3):
C:/Ruby/lib/ruby/1.8/net/protocol.rb:133:in `sysread'
C:/Ruby/lib/ruby/1.8/net/protocol.rb:133:in `rbuf_fill'
C:/Ruby/lib/ruby/1.8/timeout.rb:45:in `timeout'
C:/Ruby/lib/ruby/1.8/timeout.rb:62:in `timeout'
C:/Ruby/lib/ruby/1.8/net/protocol.rb:132:in `rbuf_fill'
C:/Ruby/lib/ruby/1.8/net/protocol.rb:116:in `readuntil'
C:/Ruby/lib/ruby/1.8/net/protocol.rb:126:in `readline'
C:/Ruby/lib/ruby/1.8/net/http.rb:1988:in `read_status_line'
C:/Ruby/lib/ruby/1.8/net/http.rb:1977:in `read_new'
C:/Ruby/lib/ruby/1.8/net/http.rb:1046:in `request'
C:/Ruby/lib/ruby/1.8/net/http.rb:944:in `request_get'
The appropriate part in protocol.rb is this:
def rbuf_fill
timeout(@read_timeout) {
@rbuf << @io.sysread(1024)
}
end
So sysread suddenly considers "1024" to be an invalid number of bytes
to read? After having considered it valid on each of the previous 5000
iterations?
Any clues? Thanks.