Logan Capaldo
12/8/2005 8:28:00 PM
On Dec 8, 2005, at 2:07 PM, William E. Rubin wrote:
> 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.
Maybe there aren't 1024 bytes left? According to the docs sysread is
supposed to raise EOFError at the end of the file, are you sure
that's not being raised?