Support for the Ruby 2.3 series has ended. See here for reference.
Object
Returns number of bytes that can be read without blocking. Returns zero if no information available.
static VALUE io_nread(VALUE io) { rb_io_t *fptr; int len; ioctl_arg n; GetOpenFile(io, fptr); rb_io_check_readable(fptr); len = rb_io_read_pending(fptr); if (len > 0) return INT2FIX(len); if (!FIONREAD_POSSIBLE_P(fptr->fd)) return INT2FIX(0); if (ioctl(fptr->fd, FIONREAD, &n)) return INT2FIX(0); if (n > 0) return ioctl_arg2num(n); return INT2FIX(0); }
Returns true if input available without blocking, or false. Returns nil if no information available.
static VALUE io_ready_p(VALUE io) { rb_io_t *fptr; struct timeval tv = {0, 0}; GetOpenFile(io, fptr); rb_io_check_readable(fptr); if (rb_io_read_pending(fptr)) return Qtrue; if (wait_for_single_fd(fptr, RB_WAITFD_IN, &tv)) return Qtrue; return Qfalse; }
Waits until IO is readable without blocking and
returns self
, or nil
when times out. Returns
true
immediately when buffered data is available.
static VALUE io_wait_readable(int argc, VALUE *argv, VALUE io) { rb_io_t *fptr; struct timeval timerec; struct timeval *tv; GetOpenFile(io, fptr); rb_io_check_readable(fptr); tv = get_timeout(argc, argv, &timerec); if (rb_io_read_pending(fptr)) return Qtrue; if (wait_for_single_fd(fptr, RB_WAITFD_IN, tv)) { return io; } return Qnil; }
Waits until IO is readable without blocking and
returns self
, or nil
when times out. Returns
true
immediately when buffered data is available.
static VALUE io_wait_readable(int argc, VALUE *argv, VALUE io) { rb_io_t *fptr; struct timeval timerec; struct timeval *tv; GetOpenFile(io, fptr); rb_io_check_readable(fptr); tv = get_timeout(argc, argv, &timerec); if (rb_io_read_pending(fptr)) return Qtrue; if (wait_for_single_fd(fptr, RB_WAITFD_IN, tv)) { return io; } return Qnil; }
Waits until IO is writable without blocking and
returns self
or nil
when times out.
static VALUE io_wait_writable(int argc, VALUE *argv, VALUE io) { rb_io_t *fptr; struct timeval timerec; struct timeval *tv; GetOpenFile(io, fptr); rb_io_check_writable(fptr); tv = get_timeout(argc, argv, &timerec); if (wait_for_single_fd(fptr, RB_WAITFD_OUT, tv)) { return io; } return Qnil; }