2026-04-05 Todd Rinaldo (0.52) Bug fixes: * Fix dead $RegExpLock that was never acquired in ithreads mode. The lock variable existed but was never actually locked before regexp compilation, leaving ithreads unprotected. Also fix share() call to pass explicit ref for runtime-loaded prototype. PR #33 * Fix ithreads auto-detection to gate on Perl 5.10+ and exclude Windows. On Perl 5.8.x threads::shared is never loaded, making lock() a no-op. On Windows, DuplicateHandle() corrupts Winsock sockets — WSADuplicateSocket() is required instead. GH #19, GH #30, GH #34, PR #35, PR #50 * Correct $eventId hash key typo in Log.pm that prevented event IDs from being logged. PR #36 * Fix Done() call in test server Loop method — was called without arguments, preventing proper server shutdown. PR #38 * Clean up stale test artifacts (log, ndtest.cnt). PR #40 * Harden ReadConfigFile against $@ contamination and $! errors. PR #44 * Skip pidfile write when pidfile option is not set, preventing spurious empty pidfile creation. PR #45 * Close cloned listening socket in ithreads handler threads. Perl ithreads dup every open handle into new threads; on Windows closing these at thread exit invalidated the parent's handle. Also re-add Windows skip with root-cause documentation. GH #19, GH #30, PR #46 * Address CPAN testers failures in t/reap.t and t/fork.t. PR #48 * Skip ithread-detach.t on Perl < 5.10. PR #49 * Verify privilege drop succeeded in Bind(). Assigning to $>/$) silently fails without permission — the daemon would continue running as root. PR #51 * Use POSIX::setuid/setgid for permanent privilege drop in Bind(). The previous $< = ($> = $user) left saved-set-user-ID as root, allowing a compromised process to regain privileges. PR #55 Improvements: * Modernize open() calls to 3-arg form with lexical filehandles throughout the codebase. PR #41 Maintenance: * Fix POD typos and remove outdated alpha warning. PR #37 * Fix stale --mode=threads references and config example syntax in documentation. PR #39 * Update ancient FSF address in Net::Daemon::Test copyright. PR #35 * Convert server tests from raw TAP to Test::More. PR #42 * Convert ithreads tests to Test::More and fix Test.pm fd leak. PR #43 * Convert remaining tests (loop.t, loop-child.t, unix_clients.t, forkm.t) to Test::More. PR #47 2026-03-22 Todd Rinaldo (0.51) Bug fixes: * Fix Socket::INADDR_ANY constant for unix socket client auth. GH #1, PR #27 * Fix post_clone() hook - Clone() never called new(), so the $self->{'parent'} check in new() was dead code. Added post_clone() method that Clone() calls after creating the new object. GH #2, PR #26 * Open logfile when filename string is provided via --logfile. OpenLog() previously returned the logfile value as-is when it was a defined string, causing Log() to fall through to STDERR. GH #3, PR #25 (rt.cpan.org #76133) * Reap forked child processes to prevent zombie accumulation. SigChildHandler now uses a proper waitpid reaper instead of returning 'IGNORE', fixing zombie buildup on Windows/Strawberry Perl after ~64 connections. GH #5, PR #23 * Fix ReadConfigFile implementation traversing @INC. GH #8 (rt.cpan.org #123213) * Detach threads in ChildFunc to prevent memory leaks. Thread objects were never joined or detached, causing leftover thread mappings to accumulate. GH #12, PR #22 * Only load threads if forks hasn't already been loaded and threads exists. GH #16 Improvements: * Add post_clone() hook for per-connection initialization. Subclasses can override to perform per-connection setup. GH #2, PR #26 * Add --listen option to Options() to allow overriding the default listen backlog of 10. GH #4, PR #24 Maintenance: * Modernize Makefile.PL metadata: add LICENSE, MIN_PERL_VERSION, TEST_REQUIRES, upgrade META_MERGE to meta-spec v2, update GitHub URLs. PR #28 * Modernize CI workflow: upgrade actions/checkout to v4, use perldocker/perl-tester images, dynamic Perl version matrix covering 5.8 through devel, add disttest job. PR #29 * Disable t/ithreadm.t for Windows. GH #19 * Improve skip messages and detection of ithreads/forks in tests. * Convert t/base.t to Test::More. * Apply consistent perltidy formatting. * Add strict/warnings, replace 'use vars' with 'our'. * Remove perl 4-ish subroutine calls. 2020-09-22 Todd Rinaldo (0.49) * Perl 5.6 is the minimum required version now. * RIP Thread.pm it has not been relevant since 5.6 2011-03-09 Malcolm Nooning (0.48) * t/forkm.t Patched perl Leon Timmermans http://rt.perl.org/rt3/Public/Bug/Display.html?id=83646 2011-03-01 Malcolm Nooning (0.47) * lib/Net/Daemon.pm Patched per bug 32887 "ithreads not detected due to a typo" 2011-02-22 Malcolm Nooning (0.46) * lib/Net/Daemon.pm Fixed "Subroutine import redefined" problem that perl 5.8.8 CPAN testers was getting. It was due to more than one "require threads" being run. * distribution. Bumped up the version number first. 2011-02-18 Malcolm Nooning (0.45) * lib/Net/Daemon.pm Used "make dist" to create the uploaded * distribution. Bumped up the version number first. 2011-02-17 Malcolm Nooning (0.44) * lib/Net/Daemon.pm Added ServClose patch by Gaspar Chilingarov * t/thread.t Added patches by Daniel Macks and Joe McMahon, and added Test::More and skip_all for Windows < 5.10 2009-03-12 Joe McMahon (0.44) * Added necessary thread sharing to work with 5.10 threads model: regexp-threads, * Bumped minimum required perl to 5.10 for t/threads.t tests 2007-06-17 Malcolm Nooning (0.43) * lib/Net/Daemon.pm Needed to up the VERSION number 2007-06-16 Malcolm Nooning (0.42) * t/forkm.t: Added a wait so that the parent will not loop around and make another child until the previous child has been destroyed. 2007-05-23 Malcolm Nooning (0.41) * t/forkm.t: When all ten childs are exited, sub CatchChild will now exit. 2007-05-16 Malcolm Nooning (0.40) * t/threadm.t: The tests are now skipped with a passing indication when usethreads is defined, which would mean that the ithreadm tests are the ones that matter. Test.pm: A patch from todd.e.rinaldo was used. I do not remember what the issues were. 2006-02-15 Jochen Wiedmann (0.39) * t/forkm.t: Hopefully, I finally got rid of the problem with the forking tests. It seems, that the perlipc manual got updated in the past years, most possibly for the same reason: A child handler must be written to catch childs in a loop. 2003-11-10 Jochen Wiedmann (0.38) * lib/Net/Daemon.pm: It is now possible to specify user/group root (aka 0). (rgreab@fx.ro) * Added mode 'ithreads'. (Bill Jackson, ) * lib/Net/Daemon.pm (Bind): The parent process is now explicitly closing the client socket in fork mode. (Thought this would happen automatically due to garbage collection, but possibly it doesn't.) Tulsi Ram Mayala, 2002-08-20 Jochen Wiedmann (0.37) * lib/Net/Daemon.pm (Bind): The server died, if accepting a connection failed. Fixed. Nathan Mueller 2001-11-12 Jochen Wiedmann (0.36) * For whatever reason, Thread->self returns undef under ActivePerl. This is now handled properly in Net::Daemon::Log. 2001-04-08 Jochen Wiedmann (0.35) * Added preforked childs to mode 'single'. (Gerald Richter, ) * t/server (Run): Child process is now waiting one second in forking mode. Helps the script t/forkm.t to run fine. (Radu Greab ) 2000-12-22 Jochen Wiedmann (0.34) * Changed "kill 1" to "kill 'TERM'" when working with fork. Thanks to Torsten Foertsch (torsten.foertsch@gmx.net), in particular for his explanations on the rationale behind SIGHUP. 2000-11-07 Jochen Wiedmann (0.32) * lib/Net/Daemon.pm: SigChildHandler is now always returning undef or IGNORE. 2000-06-26 Jochen Wiedmann (0.31) * lib/Net/Daemon/Log.pm (OpenLog): Same thing for FreeBSD. Thanks to Kurt Jaeger . 2000-10-05 Jochen Wiedmann (0.30) * lib/Net/Daemon.pm: Fixed problem with setlogsock on Solaris. My thanks to Wolfgang Friebel . 1999-11-14 Jochen Wiedmann (0.29) * lib/Net/Daemon/Log.pm (Fatal): Now displaying the callers error line and file, rather than that of the Fatal() method. 1999-09-26 Jochen Wiedmann (0.28) * lib/Net/Daemon/Log.pm: Added LogTime method. Stefan Engel * lib/Net/Daemon.pm: Fixed use of $socket->sockhost() instead of $socket->peerhost() when logging the clients IP address. Stefan Engel * lib/Net/Daemon.pm: Made 'IGNORE' the default for $SIG{'CHLD'} on Solaris. Stefan Engel 1999-08-11 Jochen Wiedmann (0.27) * lib/Net/Daemon.pm (Bind): Under Linux the CHLD signal is now ignored, due to a suggestion of Gaal Yahas . Required because zombies have been created under heavy load. 1999-08-11 Jochen Wiedmann (0.26) * lib/Net/Daemon/Test.pm (Child): Fixed handling of "." in directory names. Thanks to Tom Lowery, . * t/threadm.t (MyChild): Use of alarm() now depends on a working alarm() function. (Not working under Win32.) Thanks to Tom Lowery, 1999-07-24 Jochen Wiedmann (0.25) * lib/Net/Daemon.pm: Added the Loop method and the loop-timeout option. 1999-07-12 Jochen Wiedmann (0.24) * lib/Net/Daemon.pm (Bind): Moved PID file creation before chroot. Benjamin Ritcey * lib/Net/Daemon.pm (Bind): Added use of the Proc::Daemon::Init module, if present. 1999-07-02 Jochen Wiedmann (0.23) * lib/Net/Daemon.pm (new): Fixed automatic mode detection. Benjamin Ritcey 1999-07-01 Jochen Wiedmann (0.22) * lib/Net/Daemon.pm (Bind): Made --pidfile working. (Joshua Pincus ) 1999-06-27 Jochen Wiedmann (0.21) * lib/Net/Daemon.pm (Bind): Under Solaris the accept() call can fail with a value of EINTR if a SIGCHLD was catched. This is trapped now. Thanks to Brady Montz . 1999-03-20 Liraz Siri (0.20) * skipped to 0.2 since I've independantly made modifications, and I'd like to avoid conflict. * unix domain support. * minor bug fixes jochen made in 0.16 and 0.17. 1998-12-06 Jochen Wiedmann (0.15) * Added regexp lock. * Fixed the example server in the man page. 1998-10-30 Jochen Wiedmann (0.14) * lib/Net/Daemon.pm (Bind): Made server quiet without '--debug'. 1998-10-28 Jochen Wiedmann (0.13) * lib/Net/Daemon.pm: Some minor modifications for the DBI Proxy. 1998-10-25 Jochen Wiedmann (0.12) * Moved OpenLog, Log, Debug, Error and Fatal to Net::Daemon::Log. 1998-10-17 Jochen Wiedmann (0.11) * Daemon.pm: Added --configfile. * Daemon.pm: Removed --forking and --single in favour of --mode. * Daemon.pm: Removed --stderr in favour of --logfile=stderr. * Daemon.pm: Added $self->{'clients'}, recognizes 'mask' and 'accept' attributes.