Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IO#read_nonblock throwing EOFError with "exception: false" #148

Closed
HoneyryderChuck opened this issue Oct 24, 2017 · 2 comments
Closed

IO#read_nonblock throwing EOFError with "exception: false" #148

HoneyryderChuck opened this issue Oct 24, 2017 · 2 comments

Comments

@HoneyryderChuck
Copy link
Contributor

I'm using exceptionless non-blocking IO API with Jruby 9.1.13.0. In a busy loop I have, it returns (predictably) :wait_readable, until it doesn't, and I get the message:

 EOFError: No message available

I thought that, by using exception: false, that the nonblocking APIs can't throw exception, but rather, :wait_readable/writable when buffer is unavailable, and nil when IO is closed (equivalent to EOFError in older rubies). In fact, this behaviour is consistent in ruby 2.3.0 and newer.

However, I can't seem to find documentation validating this. As of ruby-doc, this is only enforced since 2.4.2, and only for #read_nonblock. But I think this is more a case of the docs not being up-to-date.

@HoneyryderChuck
Copy link
Contributor Author

Also, dunno if related, but although EOFed, it's still selectable:

loop do
  r, w = IO.select([r], [w])
  r.each do |reader|
    begin
      read.read_nonb...
    rescue EOFError
    end
  end
end

which is another difference with CRuby.

@HoneyryderChuck
Copy link
Contributor Author

just realized I opened this in the wrong repo. Doh!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant