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.
