2026-04-05 Todd Rinaldo <toddr@cpan.org> (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 <toddr@cpan.org> (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 <toddr@cpan.org> (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 <m.nooning@comcast.net> (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 <m.nooning@comcast.net> (0.47)
* lib/Net/Daemon.pm Patched per bug 32887
"ithreads not detected due to a typo"
2011-02-22 Malcolm Nooning <m.nooning@comcast.net> (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 <m.nooning@comcast.net> (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 <m.nooning@comcast.net> (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 <mcmahon@blekko.com> (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 <m.nooning@comcast.net> (0.43)
* lib/Net/Daemon.pm Needed to up the VERSION number
2007-06-16 Malcolm Nooning <m.nooning@comcast.net> (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 <m.nooning@comcast.net> (0.41)
* t/forkm.t: When all ten childs are exited,
sub CatchChild will now exit.
2007-05-16 Malcolm Nooning <m.nooning@comcast.net> (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 <jwied@cpan.org> (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 <joe@ispsoft.de> (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,
<bjackson@ah.ddiglobal.com>)
* 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,
<tulsi_rammayala@pspl.co.in>
2002-08-20 Jochen Wiedmann <joe@ispsoft.de> (0.37)
* lib/Net/Daemon.pm (Bind): The server died, if
accepting a connection failed. Fixed.
Nathan Mueller <nmueller@cs.wisc.edu>
2001-11-12 Jochen Wiedmann <joe@ispsoft.de> (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 <joe@ispsoft.de> (0.35)
* Added preforked childs to mode 'single'. (Gerald Richter,
<richter@ecos.de>)
* t/server (Run): Child process is now waiting one second
in forking mode. Helps the script t/forkm.t to run fine.
(Radu Greab <radu@netsoft.ro>)
2000-12-22 Jochen Wiedmann <joe@ispsoft.de> (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 <joe@ispsoft.de> (0.32)
* lib/Net/Daemon.pm: SigChildHandler is now always returning
undef or IGNORE.
2000-06-26 Jochen Wiedmann <joe@ispsoft.de> (0.31)
* lib/Net/Daemon/Log.pm (OpenLog): Same thing for FreeBSD. Thanks
to Kurt Jaeger <pi@lf.net>.
2000-10-05 Jochen Wiedmann <joe@ispsoft.de> (0.30)
* lib/Net/Daemon.pm: Fixed problem with setlogsock on Solaris. My
thanks to Wolfgang Friebel <friebel@ifh.de>.
1999-11-14 Jochen Wiedmann <joe@ispsoft.de> (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 <joe@ispsoft.de> (0.28)
* lib/Net/Daemon/Log.pm: Added LogTime method.
Stefan Engel <St_Engel@gmx.net>
* lib/Net/Daemon.pm: Fixed use of $socket->sockhost() instead
of $socket->peerhost() when logging the clients IP address.
Stefan Engel <St_Engel@gmx.net>
* lib/Net/Daemon.pm: Made 'IGNORE' the default for $SIG{'CHLD'}
on Solaris. Stefan Engel <St_Engel@gmx.net>
1999-08-11 Jochen Wiedmann <joe@ispsoft.de> (0.27)
* lib/Net/Daemon.pm (Bind): Under Linux the CHLD signal is now
ignored, due to a suggestion of Gaal Yahas <gaal@forum2.org>.
Required because zombies have been created under heavy load.
1999-08-11 Jochen Wiedmann <joe@ispsoft.de> (0.26)
* lib/Net/Daemon/Test.pm (Child): Fixed handling of "." in
directory names. Thanks to Tom Lowery, <tlowery@dsioj.dla.mil>.
* t/threadm.t (MyChild): Use of alarm() now depends on a working
alarm() function. (Not working under Win32.) Thanks to Tom
Lowery, <tlowery@dsioj.dla.mil>
1999-07-24 Jochen Wiedmann <joe@ispsoft.de> (0.25)
* lib/Net/Daemon.pm: Added the Loop method and the loop-timeout
option.
1999-07-12 Jochen Wiedmann <joe@ispsoft.de> (0.24)
* lib/Net/Daemon.pm (Bind): Moved PID file creation before
chroot. Benjamin Ritcey <Benjamin.Ritcey@tfn.com>
* lib/Net/Daemon.pm (Bind): Added use of the Proc::Daemon::Init
module, if present.
1999-07-02 Jochen Wiedmann <joe@ispsoft.de> (0.23)
* lib/Net/Daemon.pm (new): Fixed automatic mode detection.
Benjamin Ritcey <Benjamin.Ritcey@tfn.com>
1999-07-01 Jochen Wiedmann <joe@ispsoft.de> (0.22)
* lib/Net/Daemon.pm (Bind): Made --pidfile working.
(Joshua Pincus <pncu_ss@troi.cc.rochester.de>)
1999-06-27 Jochen Wiedmann <joe@ispsoft.de> (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 <bradym@cs.arizona.edu>.
1999-03-20 Liraz Siri <liraz_siri@usa.net> (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 <joe@ispsoft.de> (0.15)
* Added regexp lock.
* Fixed the example server in the man page.
1998-10-30 Jochen Wiedmann <joe@ispsoft.de> (0.14)
* lib/Net/Daemon.pm (Bind): Made server quiet without '--debug'.
1998-10-28 Jochen Wiedmann <joe@ispsoft.de> (0.13)
* lib/Net/Daemon.pm: Some minor modifications for the DBI Proxy.
1998-10-25 Jochen Wiedmann <joe@ispsoft.de> (0.12)
* Moved OpenLog, Log, Debug, Error and Fatal to Net::Daemon::Log.
1998-10-17 Jochen Wiedmann <joe@ispsoft.de> (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.