invalid arg to sysread deep within protocol.rb

Discussion in 'Ruby' started by William E. Rubin, Dec 8, 2005.

  1. 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.
     
    William E. Rubin, Dec 8, 2005
    #1
    1. Advertising

  2. 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?
     
    Logan Capaldo, Dec 8, 2005
    #2
    1. Advertising

  3. > 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.
     
    William E. Rubin, Dec 8, 2005
    #3
  4. This seems to occur every few thousand iterations (not the same number
    of iterations every time).
     
    William E. Rubin, Dec 8, 2005
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. FabMahesh
    Replies:
    0
    Views:
    561
    FabMahesh
    Dec 11, 2007
  2. n00m
    Replies:
    5
    Views:
    413
  3. Hal Fulton

    sysread and buffered I/O

    Hal Fulton, Jul 21, 2004, in forum: Ruby
    Replies:
    39
    Views:
    704
    Tanaka Akira
    Jul 24, 2004
  4. Replies:
    7
    Views:
    204
  5. Replies:
    21
    Views:
    427
    Barry Schwarz
    Mar 5, 2014
Loading...

Share This Page