1Revision history for IO-Async 2 30.800 2021-11-11 4 [CHANGES] 5 * Bumped up to three-digit minor version number 6 * Added IO::Async::OS->signum2name 7 * Implement Future::IO->waitpid API 8 * Skip the `spawn` Routine model if POSIX fork() is not available 9 * Replace getaddrinfo / getnameinfo with virtual mocking functions 10 for unit-testing the resolve, so as not to rely on local platform 11 resolver behaviours 12 130.79 2021-08-06 14 [CHANGES] 15 * Permit IO::Async::Routine or Function by module+func names instead 16 of CODE reference 17 * Added new Routine/Function model of `spawn` 18 * Implement IO::Async::Resolver by module+func rather than code 19 20 [BUGFIXES] 21 * Require Socket 2.029 on MSWin32 because of AF_UNIX fix (RT133018) 22 230.78 2021-01-21 24 [CHANGES] 25 * Warn on attempts to ->connect to INADDR(6)_LOOPBACK as some OSes 26 (e.g. OpenBSD) do not allow it 27 * Various fixes for IO::Async::LoopTests to better support 28 IO::Async::Loop::UV: 29 + Insert some ->loop_once(0) calls between timing tests to allow 30 libuv to clear its pending queues 31 + Allow loops to declare that they cannot perform all-child PID 32 watch and skip the relevant tests for it if so 33 * Have $loop->later return a future instance if not passed any code 34 (RT133240) 35 36 [BUGFIXES] 37 * Accept more error codes for failure to resolve missing hostname 38 (RT131109) 39 * Defend against some undef values at global destruction time 40 (RT132677) 41 420.77 2020-05-13 43 [CHANGES] 44 * Updated for Metrics::Any 0.05 45 * Report an info-type gauge metric to track loop types 46 * Loop processing time should be a timer metric, not a distribution 47 * Don't bother reporting zero-byte stream read/write metrics 48 49 [BUGFIXES] 50 * Skip metrics-related unit tests if metrics aren't active, even 51 though we depend on Test::Metrics::Any 52 * Account for MSWin32's EWOULDBLOCK in t/70future-io.t 53 540.76 2020-05-05 55 [CHANGES] 56 * Initial attempt at providing metrics via Metrics::Any 57 * Renamed ->(un)watch_child API to ->(un)watch_process 58 * Renamed 'child' LoopTests suite to 'process' 59 600.75 2019-11-26 00:06:59 61 [CHANGES] 62 * Remember to keep O_NONBLOCK off on IO::Async::Channel sync mode 63 filehandles 64 * Added IO::Async::Process->finish_future 65 * Added IO::Async::Routine->result_future 66 * Future-returning version of IO::Async::Function->stop 67 * Don't load IO::Socket or Sereal modules unless required 68 69 [BUGFIXES] 70 * Refresh the sigpipe in ->post_fork if required (RT128588) 71 * Fix some spelling mistakes (RT130087) 72 * Skip the async getprotobyname() test if it doesn't work 73 synchronously (RT131029) 74 750.74 2019-06-27 18:44:38 76 [CHANGES] 77 * Warn about IO::Async::Stream using autoflush on a blocking handle 78 * Implement queuing priorities for IO::Async::Function calls (RT129918) 79 * Send a terminating signal to a ->run_process process on cancellation 80 (RT129225) 81 * Optionally make ->run_process future fail when process exits non-zero 82 (RT129225) 83 * Implement the Future::IO->syswrite API 84 85 [BUGFIXES] 86 * Skip t/70future-io.t unless Future::IO is available (RT129807) 87 * Remember to set O_NONBLOCK on IO::Async::Channel async mode 88 filehandles (RT129879) 89 * Handle Windows 7 which returns ENETDOWN to failed AF_UNIX connect() 90 (RT129806) 91 920.73 2019-06-12 16:49:28 93 [CHANGES] 94 * Provide an IO::Async implementation of Future::IO 95 * Added $loop->run_process (RT129225) 96 * Clear $ONE_TRUE_LOOP in $loop->fork so that child processes can do 97 IO::Async::Loop->new successfully 98 * Added $notifier->adopted_futures accessor (RT127818) 99 * Various docs fixes 100 1010.72 2018-04-02 19:34:27 102 [CHANGES] 103 * Expanded docs on Stream's on_read sub return values 104 * Overridable timeout for IO::Async::Test::wait_for 105 * Hide IO::Async::ChildManager as an internal implementation detail; 106 move the docs into main IO::Async::Loop 107 * Added $loop->open_process; suggest using that instead of 108 ->open_child 109 * Begin implementation of $loop->is_running method (part of RT123780) 110 111 [BUGFIXES] 112 * Make IO::Async::Future->await wait until it's ready 113 * Fix calculation of periodic timer in 'skip' mode (RT124414) 114 * Perform synchronous getaddrinfo shortcut even for service-less 115 lookups 116 * Make sure that errors from underlying read/write functions are 117 debug-logged by IO::Async::Stream 118 1190.71 2016/12/22 15:05:50 120 [CHANGES] 121 * Added 'prefork' option to IO::Async::Channel (RT115920) - thanks 122 GMARLER 123 * Prefer Sereal Channel encoding if that module is available 124 * Ensure that IaFunction still prints debug information on futures 125 * Miscellaneous spelling fixes in docs - thanks genio 126 127 [BUGFIXES] 128 * 'use lib ".";' for perl 5.24 129 * Make t/50resolver.t less sensitive to EAI_NONAME vs EAI_NODATA 130 because some resolvers lie (RT113429) 131 * Fix error message linefeed tests in t/50resolver.t (RT119369) 132 * Ensure that SIGPIPE is ignored if it's still at its default value 133 1340.70 2015/12/15 18:17:43 135 [CHANGES] 136 * Support perl 5.8.x (tested on 5.8.9, presumed working as far as 137 5.8.4) 138 1390.69 2015/11/09 19:56:58 140 [CHANGES] 141 * Use Future->catch instead of poorly-implemented string-eq test 142 * Use L<...> instead of C<...> in docs where appropriate (RT107417) 143 (thanks Arthur Axel 'fREW' Schmidt) 144 145 [BUGFIXES] 146 * Don't silently swallow Listener acceptor failures (RT107806) 147 * Don't silently swallow other ->connect errors 148 * Remember to ->unwatch_io before setting IaHandle's handle to undef 149 1500.68 2015/07/31 20:07:48 151 [CHANGES] 152 * Allow IO::Async::Function body to 'die' with an ARRAYref to set 153 more details on failed Future 154 * Have IO::Async::Resolver calls indicate the failed resolver name 155 * Have IO::Async::Resolver's getaddrinfo and getnameinfo resolvers 156 give error numbers in failure result 157 * Added 'init_code' parameter to IO::Async::Function (RT104127) 158 * Added IO::Async::Channel->encode, ->send_encoded; deprecate the old 159 ->send_frozen method 160 * Added IO::Async::Test::wait_for_future 161 162 [BUGFIXES] 163 * Clean up after 'on_hangup' loop tests (RT106061) 164 * Make ->stop + ->start on IO::Async::Timer::Periodic not forget the 165 first_interval (RT100927) 166 1670.67 2015/06/01 15:06:13 168 [CHANGES] 169 * Add a ->post_fork method to IO::Async::Loop in case subclasses 170 should take specific action (RT104130) 171 * Remove IO::Async::MergePoint entirely 172 * Add debug_printf() calls to IO::Async::Process 173 * Various documentation additions 174 175 [BUGFIXES] 176 * Remember to actually delete unused filehandles from the pollmask 177 (RT103922) 178 1790.66 2015/04/17 20:36:39 180 [CHANGES] 181 * Created IO::Async::Debug 182 * Ignore SIGPIPE by default (RT92024) 183 * IaSocket->bind now returns a Future 184 * Added IaSocket->bind resolver support and neatened up UDP examples 185 in synopsis/documentation 186 187 [BUGFIXES] 188 * Correct call to unpack() in IaStream example (RT103143) 189 * Don't silently eat accept() failures in IaListener (RT102677) 190 * Remember to add the new resolver instance to $loop in 191 ->set_resolver (RT103446) 192 * Correct implementation of ->unwatch_io on IaLoop::Poll to prevent 193 100% CPU spin (RT103445) 194 * Ensure that an exception thrown by Timer::Periodic's on_tick 195 doesn't prevent rescheduling 196 1970.65 2015/02/15 14:28:02 198 [CHANGES] 199 * Optionally allow IO::Async::Channel to use 'Sereal' serialisation 200 * Added documentation about the 'env' Child Manager key and copying 201 %ENV 202 * Take OS "preferred loop subclass" hints from IO::Async::OS directly 203 204 [BUGFIXES] 205 * Nested $stream->read_* inside read_* cause double-completion of 206 Future (RT101774) 207 * Implement IO::Async::Loop::Poll directly on _poll() syscall 208 wrapper, thus avoiding many bugs in IO::Poll (RT93141) 209 * Ensure that IO::Async::Loop::Select can cope with callbacks that 210 remove other IO handle watches (RT101919) 211 * Silently upgrade watched IO handles to O_NONBLOCK (RT102044) 212 * Complain about unrecognised keys to ->extract_addrinfo (RT101453) 213 2140.64 2014/10/17 17:51:07 215 [CHANGES] 216 * Make specific mention of 'TCP' and 'UDP' around socket examples 217 where appropriate 218 * Allow construction of an IO::Async::Handle using fileno integers 219 directly 220 * Provide a better search for 'all open filehandles' via IO::Async::OS 221 on Linux (RT97942) 222 * Allow IO::Async::Listener to have handle_constructor or handle_class 223 as a subclass method (RT97208) 224 * Clarify documentation on how to use IO::Async::Process's 225 on_exception event (RT98929) 226 227 [BUGFIXES] 228 * Ensure that Stream's write Futures are also informed of write errors 229 (RT97433) 230 * Remember to ->remove_child the individual workers of an 231 IO::Async::Function (RT99552) 232 * Fix IO::Async::Function synopsis example (RT97713) 233 2340.63 2014/07/11 15:09:08 235 [CHANGES] 236 * Allow Notifier subclasses to last-ditch handle unrecognised 237 ->configure() params 238 * Added $notifier->adopt_future 239 * Added $notifier->invoke_error and 'on_error' event 240 * Ensure that TimeQueue inserts in FIFO order for equal timestamps 241 * Kill remaining docs to long-dead IO::Async::Sequencer 242 243 [BUGFIXES] 244 * Cygwin needs the SELECT_CONNECT_EVEC OS hint as well 245 * Probe for a broken port to perform listen() tests on by using 246 ReuseAddr => 1 so it matches what IO::Async will do (RT84051) 247 2480.62 2014/03/27 23:15:25 249 [CHANGES] 250 * Added IO::Async::Future->{done,fail}_later 251 * Allow overriding of debug log file or file descriptor 252 * Avoid Future's and_then/or_else methods 253 * Allow Channel->recv in async mode to return a Future (RT91180) 254 * Ensure that Function ->call Futures cancel correctly 255 * Added $routine->kill 256 * Kill the 'getaddrinfo' => 'getaddrinfo_array' legacy redirection 257 * Allow Loop's resolver to be changed to a different object 258 259 [BUGFIXES] 260 * Avoid relying on strong forward references in Future, by creating 261 intentional cycles on pending Futures. Workaround for bugfix in 262 upcoming Future release. 263 2640.61 2013/10/15 01:10:51 265 [CHANGES] 266 * Some OSes lack signals; forbid the ->*_signal methods, and use 267 waitpid() polling for child processes if so 268 * Rearrangement of $loop->listen and IO::Async::Listener logic to 269 allow Listener subclasses to use listen extensions (e.g. SSL) 270 * Allow ->listen to construct new Stream or Socket handles 271 * Updated documentation and tests to emphasise futures with resolver 272 and ->listen 273 * Support spawning threads and watching for exit 274 * Support IO::Async::Routine based on threads 275 * Various MSWin32 improvements and fixes - it now passes tests \o/ 276 * Declare that MSWin32 does not support POSIX-like fork(); skip all 277 unit tests and functionallity based on it if so 278 279 Note: These changes break IO::Async::SSL versions 0.12 or older. 280 281 [BUGFIXES] 282 * Ensure that $stream->write( CODE, on_write/write_len ) works 283 correctly 284 285 With many thanks to Mithaldu for the use of his Windows smoker for 286 development and testing of the MSWin32 fixes 287 2880.60 2013/09/19 14:26:22 289 [CHANGES] 290 * Updated for Future 0.16 - no longer needs 'return' argument for 291 Future::Utils functions 292 * $stream->connect() ought to default socktype => "stream" 293 294 [BUGFIXES] 295 * Fix unit tests to better handle INADDR_LOOPBACK not being 127.0.0.1 296 * Skip-guard ->socket("inet6") unit tests on machines unable to 297 socket(AF_INET6) 298 * Remmeber to ->accept connections to testing socket in 299 t/63handle-connect.t 300 3010.59 CHANGES: 302 * Allow IO::Async::Stream to define custom reader/writer methods 303 * Support writeready-for-read and readready-for-write in Stream 304 * Allow Stream->write() on_write and write_len args 305 * Neatened and documented Future ->fail arguments and conventions 306 * Added Stream on_writeable_{start,stop} events 307 * Added Handle->socket, ->bind and ->connect methods 308 * Revamp of Loop->connect logic; allow passing through an 309 IO::Async::Handle instance 310 311 BUGFIXES: 312 * Ensure that stream read EOF state is visible during queued on_read 313 events that caused it 314 * Fix 'return ... or die' precendence bug in Resolver (RT87051) 315 * Need to poll() for POLLPRI on MSWin32 and Cygwin 316 3170.58 CHANGES: 318 * Added Stream read watermarks 319 320 BUGFIXES: 321 * Fix weakself event handlers' use of "shift or return" 322 3230.57 CHANGES: 324 * Allow Stream->write from a Future, CODE that returns Future, Future 325 that returns CODE, etc... 326 * Added Future-returning Stream->read_* methods and ->push_on_read 327 * Return a flush-complete notification Future from Stream->write 328 * Allow Timer::Periodic to stop itself from its own on_tick event 329 * Wrap transport on_{read,write}_eof from Protocol::Stream 330 3310.56 CHANGES: 332 * Added $loop->delay_future and $loop->timeout_future 333 * Added $future->loop accessor 334 * Use a faster splice()-based mechanism for the ARRAY-based TimeQueue 335 * Updated for Future::Utils 0.12 'repeat' function 336 337 BUGFIXES: 338 * Ensure that Process from => "" works 339 * If select() returns -1 ignore the bit vectors 340 * pipe() on Windows doesn't play with select(); emulate ->pipepair 341 using ->socketpair 342 * Correct use of S_ISREG and stat() 343 3440.55 CHANGES: 345 * Try to ensure IO::Async::OS->socket returns an IO::Socket::IP 346 instance for PF_INET or PF_INET6 if it is available 347 * Don't bother testing subsecond loop_once behaviour because most 348 loops can't actually do it 349 * Use Future::Utils instead of CPS, removing a dependency 350 * Removed IO::Async::Sequencer 351 * Print a deprecation warning on old loop classes with old timer 352 support 353 3540.54 CHANGES: 355 * Use Future instead of CPS::Future 356 * Created IO::Async::Future subclass 357 * Initial support for Futures on Loops 358 * Rewrite lots of internals to use Futures instead of MergePoints or 359 other logic 360 * Renamed all "task" to "future" in APIs 361 * Allow packing of inet/inet6 address structures to omit the IP or 362 port and presume passive or port 0 363 * Removed $notifier->get_loop synonym 364 * Make IO::Async::MergePoint throw a deprecation warning 365 3660.53 CHANGES: 367 * Added IO_ASYNC_WATCHDOG debugging support 368 369 BUGFIXES: 370 * Remember to return a task from Function->call even if it's queued 371 (RT79248) 372 3730.52 CHANGES: 374 * Initial attempt at Tasks using CPS::Future 375 * Minor fixes to timer LoopTests to prevent spurious failures of 376 sub-second timing 377 * Declare dependence on perl 5.10 now we're using 5.10 features 378 * Removed long-since deprecated IO::Async::DetachedCode 379 3800.51 CHANGES: 381 * Split much code out to new IO::Async::OS heirarchy 382 * Drop dead dependency on Test::Warn 383 * Smaller simpler signal handling, avoid POSIX::SigSet 384 * Expose getfamilybyname and getsocktypebyname as OS methods 385 386 BUGFIXES: 387 * Many small MSWin32 fixes that might help pass some tests. Likely 388 still incomplete though 389 3900.50 CHANGES: 391 * Added IO::Async::File 392 * Added filename mode of IO::Async::FileStream 393 * Make Heap dependency optional by reimplementing a tiny but less 394 efficient version of TimeQueue using a plain array 395 * No longer need MB-only Build.PL 396 397 BUGFIXES: 398 * Round up select() and poll() timeouts to nearest milisecond, might 399 help correct wait-time vs. gettimeofday() mismatches 400 * Fake read- and write-readiness of S_ISREG filehandles in select() 401 on MSWin32 402 * select() for exceptional status on MSWin32 to check for connect() 403 failures 404 * Don't unit-test that getsockname() works on socketpair()ed sockets 405 4060.49 CHANGES: 407 * Fix watch_time => enqueue_timer conversions; fix unit tests and 408 Timer implementations 409 4100.48 CHANGES: 411 * Support Channel long-running on_recv handler 412 * Support Channel directly between two Routines, in sync. mode at 413 both ends 414 * Added Loop->{watch,unwatch}_time API 415 * Added Function->restart and max_worker_calls parameter 416 * Support other reschedule policies for Timer::Periodic to allow 417 tick skipping, or drift 418 419 BUGFIXES: 420 * Fix example in Routine SYNOPSIS (thanks apeiron) 421 * Connector should check definedness of local_{host,port} rather than 422 existence 423 4240.47 CHANGES: 425 * Support $listener->listen( v6only => ... ) 426 * Added new data-passing $loop->run and $loop->stop methods 427 428 BUGFIXES: 429 * Emulate ->socketpair on MSWin32 by connecting to a temporary socket 430 * Account for EWOULDBLOCK on MSWin32 431 * Don't try reading STDIN to block awaiting a signal in unit-tests 432 * Allow zero-delay Countdown timers (RT75954) 433 * Handle dup2() collisions in ChildManager filehandle setups 434 (RT75573) 435 * Fix race condition in t/33process.t (RT75573) 436 * Ensure Timer->stop doesn't fail if the timer isn't running 437 (RT75571) 438 * Possibly-fix some cygwin test failures (RT71706) 439 * Ensure that 'passive' getaddrinfo hint is handled in both 440 synchronous and numeric cases 441 4420.46 ADDITIONS: 443 * IO::Async::Routine + IO::Async::Channel 444 * IO::Async::Process->kill method 445 446 CHANGES: 447 * Use Socket 1.93 rather than dual-dependency logic on 448 Socket::GetAddrInfo 449 * Rewrote ::Function based on ::Routine and ::Channel 450 * Cleaner refcount behaviour in ::Process 451 * ::Process no longer waits for EOF condition on write-only pipes 452 * Don't unit-test the reading end of a pipe for HUP condition 453 * Documentation updates 454 * Removed documentation for long-since deprecated $loop->detach_child 455 and ->detach_code methods 456 4570.45 CHANGES: 458 * Added Timer->is_expired predicate, remove_on_expire parameter 459 (RT71767) 460 461 BUGFIXES: 462 * Use fd3/4 in ::Function rather than STDIN/STDOUT, to avoid 463 corrupting the return channel if the body function prints (RT72448) 464 * Better error detection around setuid/setgid/setgroups (RT72407) 465 * IO::Handle->binmode is not available as a method before perl 5.12; 466 use CORE::binmode() instead 467 * Don't attempt to invoke a missing on_notifier callback in 468 Loop->listen (RT71768) 469 4700.44 CHANGES: 471 * Allow Process to have sockets as handles; including datagram 472 sockets 473 474 BUGFIXES: 475 * Extract TimeQueue entiries before firing them, in case they do 476 something weird like cancelling themselves (RT70231) 477 * Test dollarbang for EWOULDBLOCK which might help MSWin32 478 * Cope correctly with Function handles in the presence of -CS or 479 PERL_UNICODE=S 480 4810.43 CHANGES: 482 * Allow IO::Async::Notifier to be used as a non-principle mixin class 483 * Provide Notifier->loop accessor 484 * Added (still-experimental) Notifier debug features 485 * Deleted various deprecated features: 486 + Notifier to Handle upgrade 487 + Loop->enable_childmanager, Loop->disable_childmanager 488 * Print deprecation warnings on Loop->detach_code, Loop->detach_child 489 * Minor improvements to LoopTests 490 4910.42 BUGFIXES: 492 * Test Stream encoding errors on a sequence which still returns 493 U+FFFD immediately on 5.14.0 (RT69020) 494 4950.41 CHANGES: 496 * Support 'encoding' parameter in IO::Async::Stream 497 * Allow IO::Async::Stream->write with an empty string, for the 498 side-effect of setting an on_flush handler 499 * Support 'first_interval' parameter to IO::Async::Timer::Periodic 500 * Expanded documentation of timers 501 502 BUGFIXES: 503 * Explicitly 'use IO::Handle;' 504 5050.40 ADDITIONS: 506 * Added IO::Async::FileStream - RT66520 507 * Added IO::Async::Stream 'close_on_read_eof' parameter 508 * Added IO::Async::Listener 'on_accept_failure' event 509 510 CHANGES: 511 * Allow Loop->listen to be extended via extensions, similar to 512 ->connect 513 * Autoflush streams used in Function::Worker objects by default 514 * Default Resolver to idle_timeout=30, min_workers=0 515 516 BUGFIXES: 517 * Don't convert method names to CODErefs during _capture_weakself as 518 it breaks dynamic dispatch and code reload - RT65785 519 * Only calculate Timer::Periodic's next tick time if it actually has 520 a Loop 521 * Put primary GID first in a 'setgroups' list, otherwise some BSDs 522 get upset - RT65127 523 * Load getaddrinfo() from Socket or Socket::GetAddrInfo in 524 t/50resolver.t 525 * Remove the anonymous Listener from the Loop if Loop->listen fails 526 - RT66168 527 * Supply LocalPort => 0 to IO::Socket::INET constructor explicitly 528 during testing 529 5300.39 CHANGES: 531 * Added IO::Async::Notifier 'notifier_name' parameter, which may be 532 used in debugging code in a later version 533 * Added IO::Async::Stream on_write_eof event 534 * Complain about unrecognised keys in IO::Async::Loop->watch_io and 535 IO::Async::Stream->write 536 537 BUGFIXES: 538 * Don't claim on_hangup supported except on those places we know it 539 will be (Linux, FreeBSD >= 8.0) 540 * Fixed race condition in t/41detached-code.t 541 * Fixed race condition in IO::Async::Function 542 5430.38 ADDITIONS: 544 * IO::Async::Function 545 * IO::Async::Loop->notifiers accessor 546 547 CHANGES: 548 * Symbolic flags in IO::Async::Resolver as convenience for commonly 549 used flag constants 550 * Distribution now uses Test::Fatal rather than Test::Exception 551 * Resolver is now a subclass of Function, not DetachedCode 552 553 BUGFIXES: 554 * More robust detection of Socket vs Socket::GetAddrInfo 555 * Portability fix for ChildManager's FD_CLOEXEC flag 556 5570.37 ADDITIONS: 558 * Handle->close_read, ->close_write 559 * Stream on_read_eof event 560 * extract_addrinfo conveniences for 'inet', 'inet6' and 'unix' 561 562 CHANGES: 563 * Allow Process filehandles to set up plain pipes without read/write 564 behaviour on the associated Stream 565 * Renamed Loop->unpack_addrinfo to ->extract_addrinfo 566 * Prepare for Socket::getaddrinfo() in core; prefer it to 567 Socket::GetAddrInfo::getaddrinfo() 568 5690.36 ADDITIONS: 570 * IO::Async::Process 571 572 CHANGES: 573 * Allow prequeuing of ->write data in Stream 574 * Check that signal handling remains properly deferred in LoopTests 575 * Miscellaneous documentation and examples updates 576 577 BUGFIXES: 578 * RT 64558 - getaddrinfo() returns duplicate addresses for localhost 579 * Don't rely on having NI_NUMERICSERV 580 5810.35 ADDITIONS: 582 * Loop->unpack_addrinfo 583 584 CHANGES: 585 * Recognise 'inet' and 'unix' as socket families 586 * Recognise 'stream', 'dgram' and 'raw' as socket types 587 * Recognise nicer HASH-based addrinfo layout in ->connect and 588 ->listen 589 * Listener now has on_stream / on_socket as full events, not just 590 CODEref parameters 591 * Make Resolver->getaddrinfo try synchronously if given numeric names 592 * Make Resolver->getnameinfo run synchronously if given 593 NI_NUMERICHOST|NI_NUMERICSERV flags 594 * Try to combine small data buffers from Stream->write calls if 595 possible 596 597 BUGFIXES: 598 * Linefeed in die case of getaddrinfo_hash to preserve exeception 599 string 600 * Deconfigure Protocol->transport after it is closed 601 6020.34 ADDITIONS: 603 * New Notifier methods ->_replace_weakself, ->maybe_invoke_event, 604 ->maybe_make_event_cb 605 * New Protocol method ->connect 606 * New subclass Protocol::LineStream 607 * Direct Resolver->getaddrinfo and ->getnameinfo methods 608 609 CHANGES: 610 * New Protocol::Stream->new( handle => $io ) parameters, which 611 creates an IO::Async::Stream to use as a transport 612 * Renamed Loop->detach_child to Loop->fork 613 * Pass errno values into ->connect on_connect_error and 614 ->listen on_listen_error 615 * Support timeouts on Resolver operations 616 * Allow direct access to Resolver via Loop->resolver 617 618 BUGFIXES: 619 * Make sure Protocol::Stream handles writersub and on_flush callback 620 6210.33 ADDITIONS: 622 * Allow watching child PID 0, to capture every child process exit 623 * $loop->time accessor 624 * Stream->write( sub { ... } ) dynamic stream generation 625 * Stream->write( $data, on_flush => sub { ... } ) callback 626 627 CHANGES: 628 * IO::Async::Loop->new magic constructor now caches the loop; useful 629 for wrapping modules, other event system integration, etc.. 630 6310.32 ADDITIONS: 632 * IO::Async::Timer::Absolute 633 * Listener accessors for ->sockname, ->family, ->socktype 634 635 CHANGES: 636 * Implement and document Handle's want_{read,write}ready parameters 637 * Rearranged documentation for Notifier subclasses; new EVENTS 638 sections 639 * Correct location for #io-async channel on irc.perl.org 640 6410.31 ADDITIONS: 642 * Delegate Protocol->close method and on_closed continuation to its 643 transport object 644 * Stream->new_for_stdin, ->new_for_stdout, ->new_for_stdio 645 * Support Listener->new( handle => $fh ) 646 * IO::Async::PID notifier subclass 647 648 CHANGES: 649 * Better documentation of Listener and Connector addr and addrs 650 arguments 651 652 BUGFIXES: 653 * INADDR_ANY/INADDR_LOOPBACK fixes inside BSD jails with restricted 654 networking 655 6560.30 ADDITIONS: 657 * Added IO::Async::Socket 658 * Added IO::Async::Protocol and ::Protocol::Stream 659 * Added on_stream and on_socket continuations for $loop->connect and 660 Listener 661 662 CHANGES: 663 * Emulate socketpair(AF_INET,...) 664 * Allow IO::Async::Stream 's read_len and write_len to be configured 665 per-instance 666 * Allow a Stream object without an on_read handler 667 668 BUGFIXES: 669 * Cope with exceptional-state sockets in Loop::Poll 670 6710.29 CHANGES: 672 * Don't require 'CODE' refs for callbacks/continations; this allows 673 the use of CODEref objects, &{} operator overloads, or other things 674 that are callable 675 * Implement 'read_all' and 'write_all' options on IO::Async::Stream 676 * Allow IO::Async::Stream subclasses to override on_closed 677 678 BUGFIXES: 679 * Work around some OSes not implementing SO_ACCEPTCONN 680 * Ensure Handle's on_read_ready/on_write_ready callbacks also take a 681 $self reference 682 6830.28 BUGFIXES: 684 * Ensure that Timer->start returns $self even when not in a Loop 685 * Accept bare GLOB refs as IO::Async::Listener handles; upgrade them 686 to IO::Socket refs if required 687 * Applied documentation patch from RT 55375 - thanks to 688 Chris Williams 689 6900.27 CHANGES: 691 * Implement 'autoflush' option on IO::Async::Stream 692 693 BUGFIXES: 694 * Avoid $_ breaking stored signal handler references when invoking 695 them 696 * Ignore EINTR from sysread/syswrite 697 * More reliable socket address tests - don't rely on uninitialised 698 padding bytes between struct members 699 7000.26 BUGFIXES: 701 * Connect to INADDR_LOOPBACK rather than INADDR_ANY during 702 t/24listener.t; hopefully fixes FAILs on OpenBSD 703 * Fix IO::Async::Stream during combined read/write-ready of a closed 704 stream 705 7060.25 CHANGES: 707 * Accept 'stream'/'dgram'/'raw' as symbolic shortcuts for socket 708 types in connect/listen operations - avoids 'use Socket' 709 * Accept IO::Handle-derived objects in ChildManager setup keys as 710 well as raw GLOB refs 711 712 BUGFIXES: 713 * Various changes to test scripts to hopefully improve portability or 714 reliability during smoke tests 715 7160.24 ADDITIONS: 717 * Timer subclasses - Countdown and Periodic 718 * Idleness event watching via low-level 'watch_io/unwatch_io' methods 719 and higher-level 'later' method 720 * Added the missing 'unwatch_child' method 721 * Shareable acceptance testing suite for IO::Async::Loop subclasses 722 for better testing in subclass implementations 723 724 CHANGES: 725 * More future-proof API version checking for subclasses - requires 726 subclasses to declare their version. 727 ### pre-0.24 Loop subclasses are no longer compatible. ### 728 * Entirely remove the need to $loop->enable_childmanager by calling 729 waitpid() in 'watch_child'. 730 7310.23 CHANGES: 732 * Rearranged IO::Async::Listener to be a constructable Notifier 733 suclass 734 * Allow Signal, Timer and Listener to act as base classes as well as 735 standalone with callbacks 736 * Renamed IO::Async::Loop::IO_Poll to ::Poll; created transparent 737 backward-compatibility wrapper 738 7390.22 CHANGES: 740 * Added tcp-proxy.pl example 741 * More documentation on IO::Async::Notifier subclass-override methods 742 * Documented that IO::Async::MergePoint is just an Async::MergePoint 743 * Various small updates to keep CPANTS happy 744 745 BUGFIXES: 746 * Don't test Async::MergePoint locally as it's now a separate dist, 747 and the tests here were reporting false negatives. 748 7490.21 CHANGES: 750 * Added "use warnings" to all modules 751 * Created Notifier->configure method to allow changing properties of 752 a Notifier or subclass after construction 753 * New 'examples' dir with some small example scripts 754 755 BUGFIXES: 756 * More robust timing tests to avoid some spurious test failures due 757 to busy testing servers or other non-issues 758 7590.20 CHANGES: 760 * Major reworking of underlying Loop implementation: 761 + Unified low-level IO, timer and signal watches as callbacks 762 + Split IO handle parts of Notifier into new IO::Async::Handle 763 class 764 + Created Timer and Signal subclasses of Notifier 765 766 These changes will require a compatible upgrade to the underlying 767 Loop implementation. 768 769 * Hide SignalProxy and TimeQueue from CPAN's indexer, as they are 770 internal-only details that don't need exposing there. 771 * Loop magic constructor now warns if a specifically-requested class 772 is not available 773 * Allow multiple attachment of signals via Loop->attach_signal or new 774 Signal objects 775 7760.19 CHANGES: 777 * Allow control of Sequencer's pipelining 778 * Documentation fixes 779 * Allow Loop->run_child to take a 'setup' array 780 * Added 'setuid', 'setgid' and 'setgroups' child setup operations 781 * Support 'on_notifier' in Loop->listen 782 783 BUGFIXES: 784 * carp before return in Stream->write so it actually prints 785 * Ensure Streams still work after being closed and reopened by 786 ->set_handle 787 * If IO::Socket->new() fails, try again with generic ->socket 788 (makes IPv6 work on platforms without IO::Socket::INET6) 789 7900.18 CHANGES: 791 * Allow Sequencer to be a base class as well as using constructor 792 callbacks 793 * Use signal names from Config.pm rather than relying on POSIX.pm. 794 Covers more signals that way 795 796 BUGFIXES: 797 * Gracefully handle accept() returning EAGAIN 798 * Fixed handling of IO::Socket->getsockopt( SOL_SOCKET, SO_ERROR ) 799 8000.17 CHANGES: 801 * Added Stream->close_when_empty and ->close_now. Added docs 802 * Added OS abstractions of socketpair() and pipe() 803 * Many documentation changes and updates 804 805 BUGFIXES: 806 * Properly handle stream read/write errors; close immediately rather 807 than deferring until empty. 808 * Various CPAN testers somketest bug fixes 809 * Fixed http://rt.cpan.org/Ticket/Display.html?id=38476 810 8110.16 ADDITIONS: 812 * Loop->requeue_timer() 813 * Magic constructor in IO::Async::Loop which tries to find the best 814 subclass 815 * 'chdir' and 'nice' ChildManager operations 816 817 CHANGES: 818 * Make sure that top-level objects are refcount-clean by using 819 Test::Refcount, and Scalar::Util::weaken() 820 821 BUGFIXES: 822 * Keep perl 5.6.1 happy by not passing LocalPort => 0 when 823 constructing IO::Socket::INETs 824 * Pass the Type option to IO::Socket::INET constructor in test 825 scripts 826 8270.15 REMOVALS: 828 * IO::Async::Set subclasses and IO::Async::Buffer have now been 829 entirely removed. 830 831 CHANGES: 832 * Support handle-less IO::Async::Sequencer, like ::Notifier 833 * Set SO_REUSEADDR on listening sockets by default 834 * Allow Loop->listen() on a plain filehandle containing a socket 835 * No longer any need to explcitly call Loop->enable_childmanager 836 837 BUGFIXES: 838 * IO::Async::Loop->_adjust_timeout actually works properly 839 * Notifier->close() only runs on_closed callback if it actually 840 closed - allows for neater cross-connected Notifiers 841 * Made Notifier->want_{read,write}ready more efficient 842 * Notifier->close() on a child notifier works 843 * Loop->listen() should take the first successful address, rather 844 than trying them all 845 8460.14 REMOVALS: 847 * IO::Async::Set subclasses and IO::Async::Buffer are now completely 848 deprecated. Any attempt to use them will fail immediately. 849 850 ADDITIONS: 851 * 'keep' ChildManager operation 852 * IO::Async::Test::wait_for_stream() 853 * Loop->listen() 854 * IO::Async::Sequencer class 855 856 CHANGES: 857 * Support dynamic swapping of temporary 'on_read' handlers in Stream 858 * Now requires Socket::GetAddrInfo >= 0.08 859 * Further shortcuts in ChildManager setup keys - IO references and 860 simple string operation names 861 * Support handle-less IO::Async::Notifiers that have IO handles added 862 to them later 863 * Allow 'setup' key to Loop->detach_code() 864 * Various documentation updates 865 866 BUGFIXES: 867 * Allow the same filehandle to be 'dup'ed more than once in 868 ChildManager 869 8700.13 CHANGES: 871 * Flush all awaiting data from Stream when it becomes writeready 872 * Supply a real IO::Async::Test module to allow testing in 3rd party 873 distros 874 * Various documentation fixes 875 876 BUGFIXES: 877 * Don't rely on STDOUT being writable during test scripts 878 8790.12 CHANGES: 880 * Allow Notifiers that are write-only. 881 * Added ChildManager->open and ->run; with ->open_child and 882 ->run_child on the containing Loop. 883 * Moved IO::Async::Loop::Glib out to its own CPAN dist, to 884 simplify Build.PL and testing scripts 885 886 BUGFIXES: 887 * Make sure to "use IO::Socket" in IO::Async::Connector 888 * Pass 'socktype' argument to ->connect during testing 889 8900.11 INCOMPATIBLE CHANGES: 891 * Renamed IO::Async::Set::* to IO::Async::Loop::* - provided 892 backward-compatibility wrappers around old names. 893 IO::Async::Set::GMainLoop has become IO::Async::Lib::Glib 894 * Renamed IO::Async::Buffer to IO::Async::Stream - provided backward- 895 compatibility wrapper around old name. 896 * Loop->get_childmanager() and ->get_sigproxy() no longer allowed 897 898 CHANGES: 899 * Extended ->loop_once() and ->loop() feature out to all 900 IO::Async::Loop classes 901 * Added IO::Async::Resolver and IO::Async::Connector, plus Loop 902 integration 903 * Allow write-only IO::Async::Notifiers that have no read handle or 904 readiness callback. 905 9060.10 INCOMPATIBLE CHANGES: 907 * Renamed events and methods in IO::Async::Notifier to better fit the 908 naming scheme of normal Perl handles. Backward-compatibility hooks 909 are currently provided, but will be removed in a later release. Any 910 code using the old names should be updated 911 912 CHANGES: 913 * Allow DetachedCode to have multiple back-end worker processes. 914 * Control if a back-end worker exits when the code "die"s 915 * Added 'close()' method on Notifiers/Buffers. Sensible behaviour on 916 buffers with queued data to send 917 * Reset %SIG hash in ChildManager->detach_child() 918 919 BUGFIXES: 920 * Clean up temporary directory during testing 921 * Shut down DetachedCode workers properly on object deref 922 * Better handling of borderline timing failures in t/11set-*.t 923 * Close old handles before dup2()ing new ones when detaching code 924 * Various other minor test script improvements 925 9260.09 CHANGES: 927 * Added TimeQueue object and integration with IO::Async::Set and 928 subclasses. 929 * Added MergePoint object 930 * Added 'on_closed' callback support to IO::Async::Notifier 931 932 BUGFIXES: 933 * Don't depend on system locale when checking string value of $! 934 * Fixed test scripts to more closely approximate real code behaviour 935 in the presence of poll() vs. deferred signal delivery 936 9370.08 CHANGES: 938 * Added ChildManager->detach_child() method 939 * Added DetachedCode object 940 941 BUGFIXES: 942 * Better tests for presence of Glib to improve test false failures 943 * More lenient times in test script 11set-IO-Poll-timing to allow for 944 variances at test time 945 * Avoid bugs in post_select()/post_poll() caused by some notifier 946 callbacks removing other notifiers from the set 947 9480.07 BUGFIXES: 949 * Avoid race condition in t/30childmanager.t - wait for child process 950 to actually exit 951 * Avoid race condition in IO::Async::ChildManager->spawn() by waiting 952 for SIGCHLD+pipe close, rather than SIGCHLD+pipe data 953 9540.06 CHANGES: 955 * Allow 'env' setup key to ChildManager->spawn() to change the 956 child's %ENV 957 * Updated the way some of the ->spawn() tests are conducted. There 958 seems to be massive failures reported on cpantesters against 0.05. 959 These changes won't fix the bugs, but should assist in reporting 960 and tracking them down. 961 962 BUGFIXES: 963 * Don't rely on existence of /bin/true - test for /usr/bin/true as 964 well, fall back on "$^X -e 1" 965 * Avoid kernel race condition in t/32childmanager-spawn-setup.t by 966 proper use of select() when testing. 967 9680.05 CHANGES: 969 * Added ChildManager object 970 * Added singleton storage in IO::Async::Set to store a SignalProxy or 971 ChildManager conveniently 972 973 BUGFIXES: 974 * Workaround for a bug in IO::Poll version 0.05 975 9760.04 CHANGES: 977 * Added dynamic signal attach / detach methods to SignalProxy 978 * Buffer now has on_read_error / on_write_error callbacks for 979 handling IO errors on underlying sysread()/syswrite() calls 980 9810.03 CHANGES: 982 * No longer build_requires 'Glib' - print a warning if it's not 983 installed but carry on anyway. 984 * IO_Poll->loop_once() now returns the result from the poll() call 985 * Added concept of nested child notifiers within Notifier object 986 987 BUGFIXES: 988 * Fix to test scripts that call IO_Poll's loop_once() with a timeout 989 of zero. This can cause a kernel race condition, so supply some 990 small non-zero value instead. 991 9920.02 INCOMPATIBLE CHANGES: 993 * Event methods/callback functions now called "on_*" to distinguish 994 them 995 * Callback functions now pass $self as first argument to simplify 996 called code 997 998 CHANGES: 999 * Improved POD in Notifier.pm and Buffer.pm 1000 1001 BUGFIXES: 1002 * GMainLoop.pm - return 1 from callbacks so that glib doesn't remove 1003 our IO sources 1004 * GMainLoop.pm - make sure re-asserting want_writeready actually adds 1005 the IO source again 1006 10070.01 First version, released on an unsuspecting world. 1008 1009