Skip to content

Instantly share code, notes, and snippets.

@aycabta
Created February 12, 2014 12:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aycabta/8954640 to your computer and use it in GitHub Desktop.
Save aycabta/8954640 to your computer and use it in GitHub Desktop.
class IO
def readline_nonblock(length)
eoferror = nil
begin
data = read_nonblock(length)
rescue Errno::EAGAIN, Errno::EWOULDBLOCK => e
rescue EOFError => e
eoferror = e
end
if not data.nil?
if @readline_nonblock_buf.nil?
@readline_nonblock_buf = data
else
@readline_nonblock_buf += data
end
end
if @readline_nonblock_buf.nil?
if not eoferror.nil?
raise eoferror
else
raise Errno::EAGAIN
end
else
pos = @readline_nonblock_buf.index($/)
if pos.nil?
if not eoferror.nil?
return_value = @readline_nonblock_buf
@readline_nonblock_buf = nil
else
raise Errno::EAGAIN
end
else
return_value = @readline_nonblock_buf[0..(pos - 1)]
@readline_nonblock_buf = @readline_nonblock_buf[(pos + 1)..-1]
end
return_value
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment