NEWS - kgio - kinder, gentler I/O for Ruby

### kgio 2.9.2 - avoid deprecated/removed function / 2014-02-15 09:27 UTC¶ ↑

    This release is for compatibility with future releases of mainline ruby,
    as rb_thread_blocking_region is removed in r44955 of ruby trunk
    This also avoids deprecation warnings fo rb_thread_blocking_region
    2.0 and 2.1.

### kgio 2.9.1 - various Ruby 1.8.7 fixes / 2014-02-05 17:50 UTC¶ ↑

    Thanks to Christopher Rigor for this release.

    Eric Wong (2):
          only define and test kgio_syssend on 1.9+
          various 1.8.7 fixes

### kgio 2.9.0 - cleanups, bug fixes, minor improvements / 2014-02-04 03:09 UTC¶ ↑

    This adds a new kgio_syssend method for Ruby 1.9+ which behaves
    like BasicSocket#send, but will not raise exceptions on EAGAIN.

    Eric Wong (12):
          test_poll: remove race prone test_poll_EINTR_changed test
          tryopen: remove RARRAY_PTR usage in init
          read_write: remove the rest of RARRAY_PTR usage
          my_writev: stylistic fixes
          Rakefile: kill raa_update task
          avoid downsizing casts
          connect: constify RSTRING-related things
          set RSTRING_MODIFIED where appropriate for Rubinius
          split read_write.c into {read,write,writev}.c
          add kgio_syssend method to wrap send(2)
          write: correct check for various blocking regions
          tryopen: additional debug information for bad Errno values

    Hleb Valoshka (1):
          Don't use deprecated api

### kgio 2.8.1 - minor improvements and test fixes / 2013-09-11 00:22 UTC¶ ↑

    Improved error reporting for kgio_accept/kgio_tryaccept.
    Minor size reduction throughout.  There are also several
    test case fixes for race conditions.

    Thanks to Hleb Valoshka and the Debian project for all the
    help with this release!

    Eric Wong (7):
          check syscall returns against < 0 instead of == -1
          accept: more informative exception on unknown family
          test_tryopen: skip EACCES test when euid == 0
          test/lib_read_write: account for larger-than-normal pipes
          test_poll: avoid potentially thread-unsafe test
          test_poll: preserve original trap(:USR1) handler
          test_poll: be less dependent on signal handler ordering

    Hleb Valoshka (4):
          Change prefix of temporary sockets to prevent races
          Don't dump 20M in case of failure
          Create own directory for every unix socket in unit tests
          Close tempfile and unlink it immediately.

### kgio 2.8.0 - TCP Fast Open, writev/trywritev / 2013-01-18 10:52 UTC¶ ↑

    TCP Fast Open in Linux 3.7 and later is now supported
    in the client via Kgio::Socket#kgio_fastopen.

    This release also adds the kgio_writev and
    kgio_trywritev methods, thanks to funny-falcon

### kgio 2.7.4 - small fixes and cleanups / 2012-03-24 01:15 UTC¶ ↑

    Fix build for platforms lacking both TCP_CORK _and_ TCP_NOPUSH
    There are many test case fixes and cleanups, too.

### kgio 2.7.3 - compatibility fixes / 2012-03-15 07:11 UTC¶ ↑

    Fixed build and autopush support under Debian GNU/kFreeBSD.
    Test case fixes for timing-sensitive tests.

### kgio 2.7.2 - for older, and older Rubies / 2012-01-08 03:42 UTC¶ ↑

    Fix a missing #include for Ruby 1.8.5 users.  No need to
    upgrade to this (nor 2.7.1) if you're on a modern version
    of Ruby.

### kgio 2.7.1 - compatibility with older Rubies / 2012-01-08 01:59 UTC¶ ↑

    This release fixes some compatibility issues with people
    stuck on older versions of Ruby/RubyGems.

    * define RARRAY_PTR/RARRAY_LEN macros for Ruby 1.8.6
    * test/test_autopush: skip strace tests if not available
    * gemspec: disable development dependencies for old systems

### kgio 2.7.0 - minor updates / 2011-12-13 06:16 UTC¶ ↑

    When running under Ruby trunk/2.0.0dev, all IO objects created
    by kgio will be close-on-exec by default to match the (future)
    2.0.0 behavior.  accept()ed sockets in kgio have always been
    close-on-exec by default..

    Singleton Kgio.accept_* methods are deprecated as the
    kgio_accept/kgio_tryaccept methods all take an additional
    flags argument.

    There are various, test, documentation, and error message
    improvements.

### kgio 2.6.0 - minor feature update and cleanups / 2011-07-15 02:01 UTC¶ ↑

    We now export SOCK_NONBLOCK, SOCK_CLOEXEC constants in the Kgio
    namespace to make kgio_tryaccept/kgio_accept easier-to-use.
    There are also some minor internal cleanups.

### kgio 2.5.0 - a minor feature update / 2011-06-20 19:30 UTC¶ ↑

    * Kgio::File.tryopen method added.  It is like File.open
      but won't raise exceptions.  The Kgio::File class includes
      Kgio::PipeMethods, so FIFOs opened through this get the
      kgio_* API.

    * The kgio_wait_*able methods in Kgio::DefaultWaiters
      now accept an optional timeout argument.

### kgio 2.4.2 - OpenSolaris build fix / 2011-06-14 18:41 UTC¶ ↑

    * adds -lnsl and -lsocket checks for OpenSolaris

### kgio 2.4.1 - Kgio.poll avoids EINTR, really / 2011-05-21 02:54 UTC¶ ↑

    This release fixes a race condition that could allow
    Errno::EINTR to be raised even though the 2.4.0 release
    was supposed to stop that.

    Nobody uses Kgio.poll, really, so this shouldn't be an issue
    for real code, yet.

### kgio 2.4.0 - portability fixes and more / 2011-05-05 22:58 UTC¶ ↑

    == All supported platforms (*nix + MRI 1.8+, Rubinius)

    * OpenBSD (and possibly other *BSD) fixes, thanks to Jeremy Evans.

    * kgio_accept and kgio_tryaccept now take an optional second argument
      for flags (like the accept4() flags argument).

    == Ruby 1.9-only things

    * Kgio.poll no longer raises Errno::EINTR to match IO.select.

    == Ruby 1.9 trunk things

    * close() on an active FD in a different thread is better
      handled/detected.

    * copy-on-write for strings is properly triggered

### kgio 2.3.3 - minor fixes / 2011-03-15 12:09 UTC¶ ↑

    We no longer over-allocate memory for Kgio.poll (1.9.x-only).
    Under Ruby 1.9.3dev, we also use rb_thread_io_blocking_region
    to properly deal with cross-thread IO#close.

### kgio 2.3.2 - OpenBSD build fix / 2011-02-15 16:56 UTC¶ ↑

    Thanks to Jeremy Evans, this release fixes the build under OpenBSD.

### kgio 2.3.1 - compatibility fix / 2011-02-14 00:51 UTC¶ ↑

    * connect.c: disable AI_NUMERICSERV

      It's not needed since we already verify the service is a
      numeric port.  AI_NUMERICSERV is not available in older glibc
      (<2.3.4) and probably other old systems.

### kgio 2.3.0 - MSG_PEEK and poll(2) support / 2011-02-09 10:26 UTC¶ ↑

    recv() with MSG_PEEK for sockets is added with the try*
    interface.  SocketMethods#kgio_trypeek and
    SocketMethods#kgio_peek or Kgio.trypeek for non-Kgio-enabled
    sockets.

    For Ruby 1.9 only: poll(2) is exposed via the Kgio.poll
    singleton method and should provide an alternative for IO.select
    users.

    Both of these new features should work well on modern Unix-like
    operating systems.

### kgio 2.2.0 - kinder, gentler I/O for the Internets / 2011-02-04 03:07 UTC¶ ↑

    * sockets accept()ed by a TCP_NOPUSH/TCP_CORK listener
      automatically flush on kgio_*read calls if there is pending
      data.  "Kgio.autopush = false" disables this globally,
      and Kgio::Socket also get "kgio_autopush=" to enable/disable
      on a per-object individual basis.

    * ECONNRESET exceptions get empty backtraces for kgio_*read.
      There's nothing a programmer can do about these, so there's
      no point in going through the expensive backtrace generation
      process.

    * Kgio.try* singleton methods added for working with non-Kgio
      enhanced objects.  No more needing to use Object#extend
      and blowing away your method cache to make existing I/O
      objects kinder and gentler.

    * IPv6 support should be complete, systems without a native
      getaddrinfo(3) are now unsupported (and will remain so
      unless somebody complains).

    There should be no other backwards-incompatible changes other
    than requiring getaddrinfo(3) and friends for IPv6 support.

### kgio 2.1.1 - one small Rubinius fix / 2010-12-26 02:08 UTC¶ ↑

    We now avoid errno side-effects in kgio_wait_*able methods.
    This affects Rubinius, but may affect other Ruby platforms
    (particularly those that use stdio) as well.

### kgio 2.1.0 - accept improvements and fixes / 2010-12-26 01:07 UTC¶ ↑

    kgio_accept and kgio_tryaccept now take an optional argument
    to override the default Kgio::Socket class that is returned.

    These methods also fall back to using regular accept() if
    kgio was built on a system with accept4() and later run on
    a system without accept4().

### kgio 2.0.0 - major internal API changes / 2010-11-19 01:18 UTC¶ ↑

    (no code changes from 2.0.0pre1)

    This release should make Kgio easier and more consistent
    to use across a variety of libraries/applications.

    The global Kgio.wait_*able(=) accessor methods are gone in favor
    of having default kgio_wait_readable and kgio_wait_writable
    methods added to all Kgio-using classes.  Sub-classes may (and
    are encouraged to) redefine these if needed.

    Eric Wong (7):
        expand Kgio::*#kgio_read! documentation
        prefer symbolic names for waiting read/writability
        EOFError message matches Ruby's
        README: Gemcutter => RubyGems.org
        update documentation with mailing list info
        add default kgio_wait_*able methods
        switch entirely to kgio_wait_*able methods

### kgio 2.0.0pre1 - major internal API changes / 2010-11-18 23:16 UTC¶ ↑

    This release should make Kgio easier and more consistent
    to use across a variety of libraries/applications.

    The global Kgio.wait_*able(=) accessor methods are gone in favor
    of having default kgio_wait_readable and kgio_wait_writable
    methods added to all Kgio-using classes.  Sub-classes may (and
    are encouraged to) redefine these if needed.

    Eric Wong (7):
          expand Kgio::*#kgio_read! documentation
          prefer symbolic names for waiting read/writability
          EOFError message matches Ruby's
          README: Gemcutter => RubyGems.org
          update documentation with mailing list info
          add default kgio_wait_*able methods
          switch entirely to kgio_wait_*able methods

### kgio 1.3.1 - fix zero-length reads / 2010-10-08 22:20 UTC¶ ↑

    kgio_read and kgio_tryread will now return an empty string when
    a length of zero is specified instead of nil (which would signal
    an EOF).  This emulates the behavior of IO#read, IO#readpartial,
    IO#sysread, IO#read_nonblock in core Ruby for consistency.

### kgio 1.3.0 - bug and usability fixes / 2010-10-08 03:03 UTC¶ ↑

    * make Kgio::WaitWritable and Kgio::WaitReadable symbols
    * trywrite: fix stupid off-by-one error causing corrupt writes
      on retries

### kgio 1.2.1 - doc and *BSD workarounds / 2010-10-07 07:20 UTC¶ ↑

    This fixes our accept4() wrapper which did not work as expected
    on some *BSD-based systems due to fcntl(fd, F_GETFL) returning
    false information.  Linux 2.6+ users are unnaffected, including
    those without accept4().

    Also some RDoc fixes.

### kgio 1.2.0 - cleanups and minor improvements / 2010-10-05 23:14 UTC¶ ↑

    The C extension is now split into several files for
    ease-of-maintenance.

    Slightly more common, client-triggerable exceptions (EOFError,
    Errno::EPIPE, Errno::ECONNRESET) are now less expensive as they
    are generated without backtraces.

### kgio 1.1.0 - flexible accept methods / 2010-09-29 01:17 UTC¶ ↑

    * alternate classes may now be returned by accept/tryaccept
      by setting Kgio.accept_class=

### kgio 1.0.1 - compatibility fixes / 2010-09-28 03:00 UTC¶ ↑

    * add compatibility for ancient Rubies (1.8.6)
    * linux: fix accept4() support for newer Linux

### kgio 1.0.0 - initial release / 2010-09-28 00:29 UTC¶ ↑

    A kinder, gentler I/O library for Ruby