2024-10-22 version 2.4.0

* Add missing base64 and logger gem as dependency for Ruby 3.4 and 3.5.
* socket_manager: add feature to share sockets with another server.

2023-03-14 version 2.3.2

* Accept `nil` for `ServerEngine::SocketManager::Server.open` to select path automatically
* Care excluded port ranges of Windows in `ServerEngine::SocketManager.generate_path`
* Update to Rake 13 and RSpec 3 to support running tests on Ruby 3.2

2022-12-22 version 2.3.1

* Don't treat as error when worker shuts down with exit status 0

2022-06-13 version 2.3.0

* Add restart_worker_interval option to prevent workers restart immediately
  after kill
* Reopen log file when rotation done by external tool is detected
* Fix unexpected behavior of start_worker_delay option
* Remove windows-pr dependency
* Fix a potential crash that command_sender_pipe of ProcessManager::Monitor
  raises error on shutdown
* Allow to load serverengine/socket_manager without servernegine/utils
* Fix unstable tests

2022-01-13 version 2.2.5:

* Fix DLL load error on Ruby 3.1 on Windows
* Treat as error when worker shuts down unexpectedly

2021-05-24 version 2.2.4:

* Ensure to get correct Win32 socket error on Ruby 3.0

2021-02-17 version 2.2.3:

* Change SocketManager's port assignment strategy on Windows

2020-11-02 version 2.2.2:

* Fix incomplete Windows support in spawn based multi worker

2020-01-24 version 2.2.1:

* Fix IPv6 dual-stack mode issue for UDP
* experimental: Add SERVERENGINE_USE_SOCKET_REUSEPORT envvar to enable SO_REUSEPORT

2019-11-16 version 2.2.0:

* Fix IPv6 dual-stack mode issue for TCP

2019-04-22 version 2.1.1:

* Fix bug to ignore SIGDUMP_SIGNAL

2018-11-14 version 2.1.0:

* Improve socket manager security

2018-07-09 version 2.0.7:

* Add disable_sigdump option

2018-02-09 version 2.0.6:

* Avoid thread error log in ruby 2.5

2017-03-01 version 2.0.5:

* Support SERVERENGINE_SOCKETMANAGER_SOCK_DIR environment variable to change
  base directory of SocketManager's socket path

2016-11-24 version 2.0.4:

* Fix bug to crash Ruby VM when SocketManager fails to bind IPv6 addresses on Windows

2016-11-22 version 2.0.3:

* Fix bug about IPv6 handling on Windows

2016-11-17 version 2.0.2:

* Fix bug to make busy loop on Windows
* Fix bug to execute unexpected "find" command on Windows

2016-10-18 version 2.0.1:

* Fix to set GID before UID, to make it sure to set GID with superuser privilege

2016-08-23 version 2.0.0:

* Add windows-pr gem dependency to get ruby_bin_path correctly
* Add command sender feature to use pipe to control workers for Windows
* Delete MultiprocessLogDevice implementation to use Ruby's one always. This
  means removal of backward workaround code for Ruby < 2.1.
* Refactor modules and methods to clean internal file dependency Internal
  symbol `ServerEngine::Daemon::Signals` is moved to `ServerEngine::Signals`
* Add example script to run servers
* Fix required Ruby version to 2.1 or later

2016-05-19 version 1.6.4:

* Refactor to delete some warnings
* Fix infinite self call bug in SignalTread
* Add ruby 2.1 support for TravisCI

2016-04-27 version 1.6.3:

* Fix Socket Manager for UDP to adapt to ipv6
* Fix Socket Manager not to join thread in Ruby 2.1
* Fix Socket Manager to identify all localhost address
* Fix ruby dll path on Ruby x64

2016-04-14 version 1.6.2:

* Fix to use Etc instead of id command in change_privilege for windows
* Fix signal handler on Server class to be configurable
* Fix to use spawn when damonize on windows

2016-03-04 version 1.6.1:

* Fix CloseHandle definition in winsock


2015-01-07 version 1.6.0:

* Added SocketManager, a utility class for multiprocess servers to listen on
  the same TCP or UDP port dynamically.
* Added a new attr_reader accessor at Daemon#server and Supervisor#server
* Added ServerEngine.windows? method to check Windows platform
* ProcessManager now considers Windows platform


2015-09-28 version 1.5.11:

* Fix unexpected logger option handling [#22]
* Fix gem homepage link


2014-10-27 version 1.5.10:

* Added worker_type=spawn (experimental)
* Fixed Worker#config to reference Server#config so that Worker#reload reads
  the new config reloaded by Server#reload (=ConfigLoader#reload_config) in
  worker_type=thread and embedded
* Server#stop, #restart and #reload show a debug log message


2014-07-24 version 1.5.9:

* Fixed DaemonLogger#reoepen! on Ruby >= 2.1.0


2014-06-27 version 1.5.8:

* Use standard LogDevice on Ruby >= 2.1.0 imporoved at https://github.com/ruby/ruby/pull/428


2013-10-31 version 1.5.7:

* Fixed :log parameter handling


2013-10-20 version 1.5.6:

* Fixed log rotation in worker_type=process mode [#9]
* DaemonLogger supports 'trace' level


2013-09-17 version 1.5.5:

* worker_type=thread and embedded show uncaught errors caused in Worker#stop
  and Worker#reload interface
* ProcessManager: enables child process heartbeat only if enable_heartbeat
  option is true
* ProcessManager: doesn't call fcntl on pipe pairs if F_SETFD or FD_CLOEXEC
  is not defined
* ProcessManager: added #spawn(*args) method


2013-09-10 version 1.5.4:

* SignalThread: fixed "Unexpected error can't be called from trap context"
  error in Ruby 2.0 (Thanks to @jondot and @sonots)


2013-06-30 version 1.5.3:

* Daemon: uses Process::UID.from_name and Process::GID.from_name
  instead of running id command
* worker_type=thread calls before_fork
* Added MultiWorkerServer#join_workers
* DaemonLogger: fixed #initialize to use config[:log_level]


2013-06-11 version 1.5.2:

* Updated default parameters of ProcessManager to be more conservative
* Daemon: added :daemonize_error_exit_code option
* Fixed ServerEngine.create


2013-06-04 version 1.5.1:

* Changed #close callback to #after_start


2013-06-01 version 1.5.0:

* First release

