1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797
|
Revision history for IO-Async
0.64 2014/10/17 17:51:07
[CHANGES]
* Make specific mention of 'TCP' and 'UDP' around socket examples
where appropriate
* Allow construction of an IO::Async::Handle using fileno integers
directly
* Provide a better search for 'all open filehandles' via IO::Async::OS
on Linux (RT97942)
* Allow IO::Async::Listener to have handle_constructor or handle_class
as a subclass method (RT97208)
* Clarify documentation on how to use IO::Async::Process's
on_exception event (RT98929)
[BUGFIXES]
* Ensure that Stream's write Futures are also informed of write errors
(RT97433)
* Remember to ->remove_child the individual workers of an
IO::Async::Function (RT99552)
* Fix IO::Async::Function synopsis example (RT97713)
0.63 2014/07/11 15:09:08
[CHANGES]
* Allow Notifier subclasses to last-ditch handle unrecognised
->configure() params
* Added $notifier->adopt_future
* Added $notifier->invoke_error and 'on_error' event
* Ensure that TimeQueue inserts in FIFO order for equal timestamps
* Kill remaining docs to long-dead IO::Async::Sequencer
[BUGFIXES]
* Cygwin needs the SELECT_CONNECT_EVEC OS hint as well
* Probe for a broken port to perform listen() tests on by using
ReuseAddr => 1 so it matches what IO::Async will do (RT84051)
0.62 2014/03/27 23:15:25
[CHANGES]
* Added IO::Async::Future->{done,fail}_later
* Allow overriding of debug log file or file descriptor
* Avoid Future's and_then/or_else methods
* Allow Channel->recv in async mode to return a Future (RT91180)
* Ensure that Function ->call Futures cancel correctly
* Added $routine->kill
* Kill the 'getaddrinfo' => 'getaddrinfo_array' legacy redirection
* Allow Loop's resolver to be changed to a different object
[BUGFIXES]
* Avoid relying on strong forward references in Future, by creating
intentional cycles on pending Futures. Workaround for bugfix in
upcoming Future release.
0.61 2013/10/15 01:10:51
[CHANGES]
* Some OSes lack signals; forbid the ->*_signal methods, and use
waitpid() polling for child processes if so
* Rearrangement of $loop->listen and IO::Async::Listener logic to
allow Listener subclasses to use listen extensions (e.g. SSL)
* Allow ->listen to construct new Stream or Socket handles
* Updated documentation and tests to emphasise futures with resolver
and ->listen
* Support spawning threads and watching for exit
* Support IO::Async::Routine based on threads
* Various MSWin32 improvements and fixes - it now passes tests \o/
* Declare that MSWin32 does not support POSIX-like fork(); skip all
unit tests and functionallity based on it if so
Note: These changes break IO::Async::SSL versions 0.12 or older.
[BUGFIXES]
* Ensure that $stream->write( CODE, on_write/write_len ) works
correctly
With many thanks to Mithaldu for the use of his Windows smoker for
development and testing of the MSWin32 fixes
0.60 2013/09/19 14:26:22
[CHANGES]
* Updated for Future 0.16 - no longer needs 'return' argument for
Future::Utils functions
* $stream->connect() ought to default socktype => "stream"
[BUGFIXES]
* Fix unit tests to better handle INADDR_LOOPBACK not being 127.0.0.1
* Skip-guard ->socket("inet6") unit tests on machines unable to
socket(AF_INET6)
* Remmeber to ->accept connections to testing socket in
t/63handle-connect.t
0.59 CHANGES:
* Allow IO::Async::Stream to define custom reader/writer methods
* Support writeready-for-read and readready-for-write in Stream
* Allow Stream->write() on_write and write_len args
* Neatened and documented Future ->fail arguments and conventions
* Added Stream on_writeable_{start,stop} events
* Added Handle->socket, ->bind and ->connect methods
* Revamp of Loop->connect logic; allow passing through an
IO::Async::Handle instance
BUGFIXES:
* Ensure that stream read EOF state is visible during queued on_read
events that caused it
* Fix 'return ... or die' precendence bug in Resolver (RT87051)
* Need to poll() for POLLPRI on MSWin32 and Cygwin
0.58 CHANGES:
* Added Stream read watermarks
BUGFIXES:
* Fix weakself event handlers' use of "shift or return"
0.57 CHANGES:
* Allow Stream->write from a Future, CODE that returns Future, Future
that returns CODE, etc...
* Added Future-returning Stream->read_* methods and ->push_on_read
* Return a flush-complete notification Future from Stream->write
* Allow Timer::Periodic to stop itself from its own on_tick event
* Wrap transport on_{read,write}_eof from Protocol::Stream
0.56 CHANGES:
* Added $loop->delay_future and $loop->timeout_future
* Added $future->loop accessor
* Use a faster splice()-based mechanism for the ARRAY-based TimeQueue
* Updated for Future::Utils 0.12 'repeat' function
BUGFIXES:
* Ensure that Process from => "" works
* If select() returns -1 ignore the bit vectors
* pipe() on Windows doesn't play with select(); emulate ->pipepair
using ->socketpair
* Correct use of S_ISREG and stat()
0.55 CHANGES:
* Try to ensure IO::Async::OS->socket returns an IO::Socket::IP
instance for PF_INET or PF_INET6 if it is available
* Don't bother testing subsecond loop_once behaviour because most
loops can't actually do it
* Use Future::Utils instead of CPS, removing a dependency
* Removed IO::Async::Sequencer
* Print a deprecation warning on old loop classes with old timer
support
0.54 CHANGES:
* Use Future instead of CPS::Future
* Created IO::Async::Future subclass
* Initial support for Futures on Loops
* Rewrite lots of internals to use Futures instead of MergePoints or
other logic
* Renamed all "task" to "future" in APIs
* Allow packing of inet/inet6 address structures to omit the IP or
port and presume passive or port 0
* Removed $notifier->get_loop synonym
* Make IO::Async::MergePoint throw a deprecation warning
0.53 CHANGES:
* Added IO_ASYNC_WATCHDOG debugging support
BUGFIXES:
* Remember to return a task from Function->call even if it's queued
(RT79248)
0.52 CHANGES:
* Initial attempt at Tasks using CPS::Future
* Minor fixes to timer LoopTests to prevent spurious failures of
sub-second timing
* Declare dependence on perl 5.10 now we're using 5.10 features
* Removed long-since deprecated IO::Async::DetachedCode
0.51 CHANGES:
* Split much code out to new IO::Async::OS heirarchy
* Drop dead dependency on Test::Warn
* Smaller simpler signal handling, avoid POSIX::SigSet
* Expose getfamilybyname and getsocktypebyname as OS methods
BUGFIXES:
* Many small MSWin32 fixes that might help pass some tests. Likely
still incomplete though
0.50 CHANGES:
* Added IO::Async::File
* Added filename mode of IO::Async::FileStream
* Make Heap dependency optional by reimplementing a tiny but less
efficient version of TimeQueue using a plain array
* No longer need MB-only Build.PL
BUGFIXES:
* Round up select() and poll() timeouts to nearest milisecond, might
help correct wait-time vs. gettimeofday() mismatches
* Fake read- and write-readiness of S_ISREG filehandles in select()
on MSWin32
* select() for exceptional status on MSWin32 to check for connect()
failures
* Don't unit-test that getsockname() works on socketpair()ed sockets
0.49 CHANGES:
* Fix watch_time => enqueue_timer conversions; fix unit tests and
Timer implementations
0.48 CHANGES:
* Support Channel long-running on_recv handler
* Support Channel directly between two Routines, in sync. mode at
both ends
* Added Loop->{watch,unwatch}_time API
* Added Function->restart and max_worker_calls parameter
* Support other reschedule policies for Timer::Periodic to allow
tick skipping, or drift
BUGFIXES:
* Fix example in Routine SYNOPSIS (thanks apeiron)
* Connector should check definedness of local_{host,port} rather than
existence
0.47 CHANGES:
* Support $listener->listen( v6only => ... )
* Added new data-passing $loop->run and $loop->stop methods
BUGFIXES:
* Emulate ->socketpair on MSWin32 by connecting to a temporary socket
* Account for EWOULDBLOCK on MSWin32
* Don't try reading STDIN to block awaiting a signal in unit-tests
* Allow zero-delay Countdown timers (RT75954)
* Handle dup2() collisions in ChildManager filehandle setups
(RT75573)
* Fix race condition in t/33process.t (RT75573)
* Ensure Timer->stop doesn't fail if the timer isn't running
(RT75571)
* Possibly-fix some cygwin test failures (RT71706)
* Ensure that 'passive' getaddrinfo hint is handled in both
synchronous and numeric cases
0.46 ADDITIONS:
* IO::Async::Routine + IO::Async::Channel
* IO::Async::Process->kill method
CHANGES:
* Use Socket 1.93 rather than dual-dependency logic on
Socket::GetAddrInfo
* Rewrote ::Function based on ::Routine and ::Channel
* Cleaner refcount behaviour in ::Process
* ::Process no longer waits for EOF condition on write-only pipes
* Don't unit-test the reading end of a pipe for HUP condition
* Documentation updates
* Removed documentation for long-since deprecated $loop->detach_child
and ->detach_code methods
0.45 CHANGES:
* Added Timer->is_expired predicate, remove_on_expire parameter
(RT71767)
BUGFIXES:
* Use fd3/4 in ::Function rather than STDIN/STDOUT, to avoid
corrupting the return channel if the body function prints (RT72448)
* Better error detection around setuid/setgid/setgroups (RT72407)
* IO::Handle->binmode is not available as a method before perl 5.12;
use CORE::binmode() instead
* Don't attempt to invoke a missing on_notifier callback in
Loop->listen (RT71768)
0.44 CHANGES:
* Allow Process to have sockets as handles; including datagram
sockets
BUGFIXES:
* Extract TimeQueue entiries before firing them, in case they do
something weird like cancelling themselves (RT70231)
* Test dollarbang for EWOULDBLOCK which might help MSWin32
* Cope correctly with Function handles in the presence of -CS or
PERL_UNICODE=S
0.43 CHANGES:
* Allow IO::Async::Notifier to be used as a non-principle mixin class
* Provide Notifier->loop accessor
* Added (still-experimental) Notifier debug features
* Deleted various deprecated features:
+ Notifier to Handle upgrade
+ Loop->enable_childmanager, Loop->disable_childmanager
* Print deprecation warnings on Loop->detach_code, Loop->detach_child
* Minor improvements to LoopTests
0.42 BUGFIXES:
* Test Stream encoding errors on a sequence which still returns
U+FFFD immediately on 5.14.0 (RT69020)
0.41 CHANGES:
* Support 'encoding' parameter in IO::Async::Stream
* Allow IO::Async::Stream->write with an empty string, for the
side-effect of setting an on_flush handler
* Support 'first_interval' parameter to IO::Async::Timer::Periodic
* Expanded documentation of timers
BUGFIXES:
* Explicitly 'use IO::Handle;'
0.40 ADDITIONS:
* Added IO::Async::FileStream - RT66520
* Added IO::Async::Stream 'close_on_read_eof' parameter
* Added IO::Async::Listener 'on_accept_failure' event
CHANGES:
* Allow Loop->listen to be extended via extensions, similar to
->connect
* Autoflush streams used in Function::Worker objects by default
* Default Resolver to idle_timeout=30, min_workers=0
BUGFIXES:
* Don't convert method names to CODErefs during _capture_weakself as
it breaks dynamic dispatch and code reload - RT65785
* Only calculate Timer::Periodic's next tick time if it actually has
a Loop
* Put primary GID first in a 'setgroups' list, otherwise some BSDs
get upset - RT65127
* Load getaddrinfo() from Socket or Socket::GetAddrInfo in
t/50resolver.t
* Remove the anonymous Listener from the Loop if Loop->listen fails
- RT66168
* Supply LocalPort => 0 to IO::Socket::INET constructor explicitly
during testing
0.39 CHANGES:
* Added IO::Async::Notifier 'notifier_name' parameter, which may be
used in debugging code in a later version
* Added IO::Async::Stream on_write_eof event
* Complain about unrecognised keys in IO::Async::Loop->watch_io and
IO::Async::Stream->write
BUGFIXES:
* Don't claim on_hangup supported except on those places we know it
will be (Linux, FreeBSD >= 8.0)
* Fixed race condition in t/41detached-code.t
* Fixed race condition in IO::Async::Function
0.38 ADDITIONS:
* IO::Async::Function
* IO::Async::Loop->notifiers accessor
CHANGES:
* Symbolic flags in IO::Async::Resolver as convenience for commonly
used flag constants
* Distribution now uses Test::Fatal rather than Test::Exception
* Resolver is now a subclass of Function, not DetachedCode
BUGFIXES:
* More robust detection of Socket vs Socket::GetAddrInfo
* Portability fix for ChildManager's FD_CLOEXEC flag
0.37 ADDITIONS:
* Handle->close_read, ->close_write
* Stream on_read_eof event
* extract_addrinfo conveniences for 'inet', 'inet6' and 'unix'
CHANGES:
* Allow Process filehandles to set up plain pipes without read/write
behaviour on the associated Stream
* Renamed Loop->unpack_addrinfo to ->extract_addrinfo
* Prepare for Socket::getaddrinfo() in core; prefer it to
Socket::GetAddrInfo::getaddrinfo()
0.36 ADDITIONS:
* IO::Async::Process
CHANGES:
* Allow prequeuing of ->write data in Stream
* Check that signal handling remains properly deferred in LoopTests
* Miscellaneous documentation and examples updates
BUGFIXES:
* RT 64558 - getaddrinfo() returns duplicate addresses for localhost
* Don't rely on having NI_NUMERICSERV
0.35 ADDITIONS:
* Loop->unpack_addrinfo
CHANGES:
* Recognise 'inet' and 'unix' as socket families
* Recognise 'stream', 'dgram' and 'raw' as socket types
* Recognise nicer HASH-based addrinfo layout in ->connect and
->listen
* Listener now has on_stream / on_socket as full events, not just
CODEref parameters
* Make Resolver->getaddrinfo try synchronously if given numeric names
* Make Resolver->getnameinfo run synchronously if given
NI_NUMERICHOST|NI_NUMERICSERV flags
* Try to combine small data buffers from Stream->write calls if
possible
BUGFIXES:
* Linefeed in die case of getaddrinfo_hash to preserve exeception
string
* Deconfigure Protocol->transport after it is closed
0.34 ADDITIONS:
* New Notifier methods ->_replace_weakself, ->maybe_invoke_event,
->maybe_make_event_cb
* New Protocol method ->connect
* New subclass Protocol::LineStream
* Direct Resolver->getaddrinfo and ->getnameinfo methods
CHANGES:
* New Protocol::Stream->new( handle => $io ) parameters, which
creates an IO::Async::Stream to use as a transport
* Renamed Loop->detach_child to Loop->fork
* Pass errno values into ->connect on_connect_error and
->listen on_listen_error
* Support timeouts on Resolver operations
* Allow direct access to Resolver via Loop->resolver
BUGFIXES:
* Make sure Protocol::Stream handles writersub and on_flush callback
0.33 ADDITIONS:
* Allow watching child PID 0, to capture every child process exit
* $loop->time accessor
* Stream->write( sub { ... } ) dynamic stream generation
* Stream->write( $data, on_flush => sub { ... } ) callback
CHANGES:
* IO::Async::Loop->new magic constructor now caches the loop; useful
for wrapping modules, other event system integration, etc..
0.32 ADDITIONS:
* IO::Async::Timer::Absolute
* Listener accessors for ->sockname, ->family, ->socktype
CHANGES:
* Implement and document Handle's want_{read,write}ready parameters
* Rearranged documentation for Notifier subclasses; new EVENTS
sections
* Correct location for #io-async channel on irc.perl.org
0.31 ADDITIONS:
* Delegate Protocol->close method and on_closed continuation to its
transport object
* Stream->new_for_stdin, ->new_for_stdout, ->new_for_stdio
* Support Listener->new( handle => $fh )
* IO::Async::PID notifier subclass
CHANGES:
* Better documentation of Listener and Connector addr and addrs
arguments
BUGFIXES:
* INADDR_ANY/INADDR_LOOPBACK fixes inside BSD jails with restricted
networking
0.30 ADDITIONS:
* Added IO::Async::Socket
* Added IO::Async::Protocol and ::Protocol::Stream
* Added on_stream and on_socket continuations for $loop->connect and
Listener
CHANGES:
* Emulate socketpair(AF_INET,...)
* Allow IO::Async::Stream 's read_len and write_len to be configured
per-instance
* Allow a Stream object without an on_read handler
BUGFIXES:
* Cope with exceptional-state sockets in Loop::Poll
0.29 CHANGES:
* Don't require 'CODE' refs for callbacks/continations; this allows
the use of CODEref objects, &{} operator overloads, or other things
that are callable
* Implement 'read_all' and 'write_all' options on IO::Async::Stream
* Allow IO::Async::Stream subclasses to override on_closed
BUGFIXES:
* Work around some OSes not implementing SO_ACCEPTCONN
* Ensure Handle's on_read_ready/on_write_ready callbacks also take a
$self reference
0.28 BUGFIXES:
* Ensure that Timer->start returns $self even when not in a Loop
* Accept bare GLOB refs as IO::Async::Listener handles; upgrade them
to IO::Socket refs if required
* Applied documentation patch from RT 55375 - thanks to
Chris Williams
0.27 CHANGES:
* Implement 'autoflush' option on IO::Async::Stream
BUGFIXES:
* Avoid $_ breaking stored signal handler references when invoking
them
* Ignore EINTR from sysread/syswrite
* More reliable socket address tests - don't rely on uninitialised
padding bytes between struct members
0.26 BUGFIXES:
* Connect to INADDR_LOOPBACK rather than INADDR_ANY during
t/24listener.t; hopefully fixes FAILs on OpenBSD
* Fix IO::Async::Stream during combined read/write-ready of a closed
stream
0.25 CHANGES:
* Accept 'stream'/'dgram'/'raw' as symbolic shortcuts for socket
types in connect/listen operations - avoids 'use Socket'
* Accept IO::Handle-derived objects in ChildManager setup keys as
well as raw GLOB refs
BUGFIXES:
* Various changes to test scripts to hopefully improve portability or
reliability during smoke tests
0.24 ADDITIONS:
* Timer subclasses - Countdown and Periodic
* Idleness event watching via low-level 'watch_io/unwatch_io' methods
and higher-level 'later' method
* Added the missing 'unwatch_child' method
* Shareable acceptance testing suite for IO::Async::Loop subclasses
for better testing in subclass implementations
CHANGES:
* More future-proof API version checking for subclasses - requires
subclasses to declare their version.
### pre-0.24 Loop subclasses are no longer compatible. ###
* Entirely remove the need to $loop->enable_childmanager by calling
waitpid() in 'watch_child'.
0.23 CHANGES:
* Rearranged IO::Async::Listener to be a constructable Notifier
suclass
* Allow Signal, Timer and Listener to act as base classes as well as
standalone with callbacks
* Renamed IO::Async::Loop::IO_Poll to ::Poll; created transparent
backward-compatibility wrapper
0.22 CHANGES:
* Added tcp-proxy.pl example
* More documentation on IO::Async::Notifier subclass-override methods
* Documented that IO::Async::MergePoint is just an Async::MergePoint
* Various small updates to keep CPANTS happy
BUGFIXES:
* Don't test Async::MergePoint locally as it's now a separate dist,
and the tests here were reporting false negatives.
0.21 CHANGES:
* Added "use warnings" to all modules
* Created Notifier->configure method to allow changing properties of
a Notifier or subclass after construction
* New 'examples' dir with some small example scripts
BUGFIXES:
* More robust timing tests to avoid some spurious test failures due
to busy testing servers or other non-issues
0.20 CHANGES:
* Major reworking of underlying Loop implementation:
+ Unified low-level IO, timer and signal watches as callbacks
+ Split IO handle parts of Notifier into new IO::Async::Handle
class
+ Created Timer and Signal subclasses of Notifier
These changes will require a compatible upgrade to the underlying
Loop implementation.
* Hide SignalProxy and TimeQueue from CPAN's indexer, as they are
internal-only details that don't need exposing there.
* Loop magic constructor now warns if a specifically-requested class
is not available
* Allow multiple attachment of signals via Loop->attach_signal or new
Signal objects
0.19 CHANGES:
* Allow control of Sequencer's pipelining
* Documentation fixes
* Allow Loop->run_child to take a 'setup' array
* Added 'setuid', 'setgid' and 'setgroups' child setup operations
* Support 'on_notifier' in Loop->listen
BUGFIXES:
* carp before return in Stream->write so it actually prints
* Ensure Streams still work after being closed and reopened by
->set_handle
* If IO::Socket->new() fails, try again with generic ->socket
(makes IPv6 work on platforms without IO::Socket::INET6)
0.18 CHANGES:
* Allow Sequencer to be a base class as well as using constructor
callbacks
* Use signal names from Config.pm rather than relying on POSIX.pm.
Covers more signals that way
BUGFIXES:
* Gracefully handle accept() returning EAGAIN
* Fixed handling of IO::Socket->getsockopt( SOL_SOCKET, SO_ERROR )
0.17 CHANGES:
* Added Stream->close_when_empty and ->close_now. Added docs
* Added OS abstractions of socketpair() and pipe()
* Many documentation changes and updates
BUGFIXES:
* Properly handle stream read/write errors; close immediately rather
than deferring until empty.
* Various CPAN testers somketest bug fixes
* Fixed http://rt.cpan.org/Ticket/Display.html?id=38476
0.16 ADDITIONS:
* Loop->requeue_timer()
* Magic constructor in IO::Async::Loop which tries to find the best
subclass
* 'chdir' and 'nice' ChildManager operations
CHANGES:
* Make sure that top-level objects are refcount-clean by using
Test::Refcount, and Scalar::Util::weaken()
BUGFIXES:
* Keep perl 5.6.1 happy by not passing LocalPort => 0 when
constructing IO::Socket::INETs
* Pass the Type option to IO::Socket::INET constructor in test
scripts
0.15 REMOVALS:
* IO::Async::Set subclasses and IO::Async::Buffer have now been
entirely removed.
CHANGES:
* Support handle-less IO::Async::Sequencer, like ::Notifier
* Set SO_REUSEADDR on listening sockets by default
* Allow Loop->listen() on a plain filehandle containing a socket
* No longer any need to explcitly call Loop->enable_childmanager
BUGFIXES:
* IO::Async::Loop->_adjust_timeout actually works properly
* Notifier->close() only runs on_closed callback if it actually
closed - allows for neater cross-connected Notifiers
* Made Notifier->want_{read,write}ready more efficient
* Notifier->close() on a child notifier works
* Loop->listen() should take the first successful address, rather
than trying them all
0.14 REMOVALS:
* IO::Async::Set subclasses and IO::Async::Buffer are now completely
deprecated. Any attempt to use them will fail immediately.
ADDITIONS:
* 'keep' ChildManager operation
* IO::Async::Test::wait_for_stream()
* Loop->listen()
* IO::Async::Sequencer class
CHANGES:
* Support dynamic swapping of temporary 'on_read' handlers in Stream
* Now requires Socket::GetAddrInfo >= 0.08
* Further shortcuts in ChildManager setup keys - IO references and
simple string operation names
* Support handle-less IO::Async::Notifiers that have IO handles added
to them later
* Allow 'setup' key to Loop->detach_code()
* Various documentation updates
BUGFIXES:
* Allow the same filehandle to be 'dup'ed more than once in
ChildManager
0.13 CHANGES:
* Flush all awaiting data from Stream when it becomes writeready
* Supply a real IO::Async::Test module to allow testing in 3rd party
distros
* Various documentation fixes
BUGFIXES:
* Don't rely on STDOUT being writable during test scripts
0.12 CHANGES:
* Allow Notifiers that are write-only.
* Added ChildManager->open and ->run; with ->open_child and
->run_child on the containing Loop.
* Moved IO::Async::Loop::Glib out to its own CPAN dist, to
simplify Build.PL and testing scripts
BUGFIXES:
* Make sure to "use IO::Socket" in IO::Async::Connector
* Pass 'socktype' argument to ->connect during testing
0.11 INCOMPATIBLE CHANGES:
* Renamed IO::Async::Set::* to IO::Async::Loop::* - provided
backward-compatibility wrappers around old names.
IO::Async::Set::GMainLoop has become IO::Async::Lib::Glib
* Renamed IO::Async::Buffer to IO::Async::Stream - provided backward-
compatibility wrapper around old name.
* Loop->get_childmanager() and ->get_sigproxy() no longer allowed
CHANGES:
* Extended ->loop_once() and ->loop() feature out to all
IO::Async::Loop classes
* Added IO::Async::Resolver and IO::Async::Connector, plus Loop
integration
* Allow write-only IO::Async::Notifiers that have no read handle or
readiness callback.
0.10 INCOMPATIBLE CHANGES:
* Renamed events and methods in IO::Async::Notifier to better fit the
naming scheme of normal Perl handles. Backward-compatibility hooks
are currently provided, but will be removed in a later release. Any
code using the old names should be updated
CHANGES:
* Allow DetachedCode to have multiple back-end worker processes.
* Control if a back-end worker exits when the code "die"s
* Added 'close()' method on Notifiers/Buffers. Sensible behaviour on
buffers with queued data to send
* Reset %SIG hash in ChildManager->detach_child()
BUGFIXES:
* Clean up temporary directory during testing
* Shut down DetachedCode workers properly on object deref
* Better handling of borderline timing failures in t/11set-*.t
* Close old handles before dup2()ing new ones when detaching code
* Various other minor test script improvements
0.09 CHANGES:
* Added TimeQueue object and integration with IO::Async::Set and
subclasses.
* Added MergePoint object
* Added 'on_closed' callback support to IO::Async::Notifier
BUGFIXES:
* Don't depend on system locale when checking string value of $!
* Fixed test scripts to more closely approximate real code behaviour
in the presence of poll() vs. deferred signal delivery
0.08 CHANGES:
* Added ChildManager->detach_child() method
* Added DetachedCode object
BUGFIXES:
* Better tests for presence of Glib to improve test false failures
* More lenient times in test script 11set-IO-Poll-timing to allow for
variances at test time
* Avoid bugs in post_select()/post_poll() caused by some notifier
callbacks removing other notifiers from the set
0.07 BUGFIXES:
* Avoid race condition in t/30childmanager.t - wait for child process
to actually exit
* Avoid race condition in IO::Async::ChildManager->spawn() by waiting
for SIGCHLD+pipe close, rather than SIGCHLD+pipe data
0.06 CHANGES:
* Allow 'env' setup key to ChildManager->spawn() to change the
child's %ENV
* Updated the way some of the ->spawn() tests are conducted. There
seems to be massive failures reported on cpantesters against 0.05.
These changes won't fix the bugs, but should assist in reporting
and tracking them down.
BUGFIXES:
* Don't rely on existence of /bin/true - test for /usr/bin/true as
well, fall back on "$^X -e 1"
* Avoid kernel race condition in t/32childmanager-spawn-setup.t by
proper use of select() when testing.
0.05 CHANGES:
* Added ChildManager object
* Added singleton storage in IO::Async::Set to store a SignalProxy or
ChildManager conveniently
BUGFIXES:
* Workaround for a bug in IO::Poll version 0.05
0.04 CHANGES:
* Added dynamic signal attach / detach methods to SignalProxy
* Buffer now has on_read_error / on_write_error callbacks for
handling IO errors on underlying sysread()/syswrite() calls
0.03 CHANGES:
* No longer build_requires 'Glib' - print a warning if it's not
installed but carry on anyway.
* IO_Poll->loop_once() now returns the result from the poll() call
* Added concept of nested child notifiers within Notifier object
BUGFIXES:
* Fix to test scripts that call IO_Poll's loop_once() with a timeout
of zero. This can cause a kernel race condition, so supply some
small non-zero value instead.
0.02 INCOMPATIBLE CHANGES:
* Event methods/callback functions now called "on_*" to distinguish
them
* Callback functions now pass $self as first argument to simplify
called code
CHANGES:
* Improved POD in Notifier.pm and Buffer.pm
BUGFIXES:
* GMainLoop.pm - return 1 from callbacks so that glib doesn't remove
our IO sources
* GMainLoop.pm - make sure re-asserting want_writeready actually adds
the IO source again
0.01 First version, released on an unsuspecting world.
|