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.