1.51: (2006-04-27)
   -- let subclasses overwrite the behavior on incomplete writes.
      default, as always, is just to force watching of writability.
      but during, say, SSL stuff, it's useful to disable that.

1.50: (2006-04-17)
   -- use bytes.  was affecting djabberd with unicode XML messages.
      diagnosis by Artur Bergman and Tatsuhiko Miyagawa.

1.49: (2006-03-02)
   -- patch to allow pluggable writer functions per socket.  so you
      can have SSL connections that do Net::SSLeay writes (or whatever)
      instead of relying on tied handles.

1.48: (2005-10-12)
   -- patch from Eric Lambrecht <eml@guba.com> who noticed that calling
      sysread in Perl w/ over ~5MB could cause Perl to just die and quit.
      so limit reads to 5MB.

1.47: (2005-08-29)
   -- new $ENV{DS_DEBUG} to warn about weird conditions, which currently
      means just peer_ip_string returning undef.  trying to trace that down
      in perlbal occasionally, but DS_DEBUG might be useful in the future
      for other things
   -- account for PostEventLoop running with two items in %PushBackSet,
      the first of which closes the second, so the second would crash
      trying to deref undef when it can't find the previously evaluated
      key in the now-empty hash.

1.46: (2005-08-24)
   -- warn about undef sockets in Danga::Socket's constructor, or overwriting
      the descriptor map with a socket using the same fd as another in use.
   -- change all print STDERR to warn (so we can trap 'em with $SIG{__WARN__})
   -- delay the removal of fds from DescriptorMap to eliminate warnings
      when one fds in the same epoll_wait/etc return set kills one of
      the others which hasn't been processed yet.  new test t/12-closerace.t to
      demonstrate the situation.

1.45: (2005-08-23)
   -- don't hang forever if there is a timer but no sockets
      and looptimeout is -1.  the problem was we always picked the
      lesser time of LoopTimeout and NextTimerTimeout, but if LoopTimeout
      was -1 (which means infinity), we preferred that, wrongly.
   -- in RunTimers, calculate the milliseconds in integer, and add 1
      to remove some floating point weirdness which caused 20-30 extra
      loops which accomplished nothing.  see comments.

1.44: (2005-08-16)
   -- fix another bug in push_back_read... ancient:  comma instead of
      semi-colon (can you tell nobody used this function before?)
   -- fix a bug in push_back_read ... apparently it never actually
      worked when you asked for less bytes than were available.
   -- adds code for when kqueue returns a fd we don't have a
      mapping for (Matt Sergeant)
   -- generic timer support (Matt Sergeant), use HiRes and rearrange
      to share some code (Brad)
   -- make tcp_cork a noop on non-linux (FIXME: port to bsd at least)

   -- don't even try epoll if not on a known/tested arch
   -- updated POD docs

   -- use the right epoll system call numbers on non-x86
   -- start of a good test suite
   -- 64-bit struct support (test suite passes on ia64, ppc)
      (and presumably ppc64, but yet untested)

   -- make the Poll mode behave like Epoll/Kqueue in that
      fds returned w/ no corresponding Danga::Socket object
      or OtherFds coderef just get ignored.  make it robust
      against apps with races, perhaps?  patch from Justin Azoff


   -- Kqueue support from Matt Sergeant


   -- make BSD::Resource optional


   -- added support for profiling (epoll only at the moment while this
      feature is further fleshed out); user application is required to
      enable profiling and actually process the resultant data

   -- if epoll_wait returns an event we can't handle, delete it.
      this means the application fucked up and lost its state somehow.
      or maybe Danga::Socket did?  still debugging this in Perlbal.

1.25: (2004-10-22)

   -- move the syscall.ph require into "package main" rather than stealing
      all its definitions into our namespace.  now other modules can
      use syscall.ph and Danga::Socket at the same time (as long as they're
      also polite and load it into main)  (NOTE: if you know a better way
      to do this, let us know...)

1.24: (2004-10-21)

   -- ability to steal the underlying socket from the Danga::Socket
      object.  this is useful if a caller wants to hold onto the socket
      but destroy the Danga::Socket object (previously the Danga::Socket
      close would close the underlying socket)

1.22: (2004-10-21)

   -- minimal POD docs
   -- first public release