Forum: Ruby invalid arg to sysread deep within protocol.rb

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
williamerubin (Guest)
on 2005-12-08 21:08
(Received via mailing list)
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.
logancapaldo (Guest)
on 2005-12-08 22:30
(Received via mailing list)
On Dec 8, 2005, at 2:07 PM, William E. Rubin wrote:

> C:/Ruby/lib/ruby/1.8/net/protocol.rb:116:in `readuntil'
>         @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?
williamerubin (Guest)
on 2005-12-08 22:46
(Received via mailing list)
> 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?

Yes, I'm sure.  Now that I look back at my original post, I notice that
I left out a crucial piece of information:

The error raised was an "Invalid Argument" error.
williamerubin (Guest)
on 2005-12-09 00:00
(Received via mailing list)
This seems to occur every few thousand iterations (not the same number
of iterations every time).
This topic is locked and can not be replied to.