/* * call-seq: * ios.write_nonblock(string) => integer * * Writes the given string to <em>ios</em> using * write(2) system call after O_NONBLOCK is set for * the underlying file descriptor. * * write_nonblock just calls write(2). * It causes all errors write(2) causes: EAGAIN, EINTR, etc. * The result may also be smaller than string.length (partial write). * The caller should care such errors and partial write. * */ static VALUE rb_io_write_nonblock(VALUE io, VALUE str) { OpenFile *fptr; FILE *f; long n; rb_secure(4); if (TYPE(str) != T_STRING) str = rb_obj_as_string(str); GetOpenFile(io, fptr); rb_io_check_writable(fptr); f = GetWriteFile(fptr); rb_io_set_nonblock(fptr); n = write(fileno(f), RSTRING(str)->ptr, RSTRING(str)->len); if (n == -1) rb_sys_fail(fptr->path); return LONG2FIX(n); }