The splice family of Linux system calls can transfer data between file
descriptors without the need to copy data into userspace.  Instead of a
userspace buffer, they rely on an ordinary Unix pipe as a kernel-level
buffer.

* http://bogomips.org/ruby_io_splice/
* ruby.io.splice / librelist.com
* git://bogomips.org/ruby_io_splice.git

Changes:

Now easier to use!

Methods now automatically retry on EINTR after checking
IO#closed? and executing interrupts.

There is a new IO::Splice::WAITALL flag (implemented in
userspace) which may be used to cause IO.splice and IO.tee
to retry (while the GVL is released) until the operation
is complete.

IO::Splice.copy_stream now works correctly for large copies
if source offset is specified.

MRI 1.8 is only weakly supported now, MRI 1.9 is the
preferred platform though Rubinius appears to work, too.

-- 
Eric Wong