Changes in NetMount server version 1.4.1 -> 1.4.2
NetMount Server 1.4.2 focuses on improved compatibility with older systems and optimization.
Build compatibility with FreeBSD 14.2 has been restored. This fixes a regression introduced in NetMount
1.4.0, where the use of std::chrono::utc_clock
in the logging system broke the build on platforms
lacking support for it.
On Windows, the networking library is no longer linked unnecessarily when it's not needed - when
using serial port sharing via the built-in network stack.
Furthermore, on systems older than Windows Vista that lack support for inet_pton
and inet_ntop
,
the server automatically falls back to using the legacy inet_addr
and inet_ntoa
functions.
Optimizations
-
Optimize volume label handling by skipping directory list
Volume label requests are now handled directly, without generating
the directory list.
Compatibility with older systems
-
Use
chrono::system_clock
instead ofchrono::utc_clock
in logstd::chrono::system_clock
is sufficient for logging purposes.
The resulting binary is smaller, and thesystem_clock
is supported
by older standard libraries, which improves compatibility. For example,
the standard library in FreeBSD 14.2 does not support
std::chrono::utc_clock
. -
udp_socket_win: Use our to_big/from_big instead of hton/ntoh
Replaced calls to
htons
,ntohs
, andntohl
with our ownto_big16
,
from_big16
, andfrom_big32
functions. These are already used elsewhere
in the codebase, so we no longer need to rely on the Windows versions. -
udp_socket_win: Dynamic load "ws2_32.dll" at runtime when needed
The "ws2_32.dll" dependency is now loaded dynamically at runtime, and only
if networking functionality is actually required. Previously, the library
was linked at build time, which meant network functions were always needed,
even when unused - such as when using serial port sharing.When serial port sharing is used, the server relies on a built-in,
OS-independent network implementation. Therefore, there's no need to
depend on Windows networking libraries at all.This change allows the server to run and share data over a serial port
even on Windows systems without networking support (e.g., stripped-down
configurations). Previously, Windows Vista or later was required due to
link-time dependencies oninet_pton
andinet_ntop
. -
udp_socket_win: inet_pton/ntop fallback for pre-Vista Windows
On Windows,
inet_pton
andinet_ntop
are only supported starting with
Windows Vista. To maintain compatibility with older versions, custom
helper functionsip_from_string
andip_to_string
were introduced.These helpers use
inet_pton
/inet_ntop
when available, and fall back
to the legacyinet_addr
andinet_ntoa
functions otherwise. This
ensures IPv4 support across a wider range of Windows versions.
The legacy functions have been available since the early days of IPv4
support in Windows - at least since Windows 95 and Windows NT 3.1.
Other
-
udp_socket_win: Log NOTICE if falling back to inet_ntoa/addr
Logs a NOTICE if
inet_pton
andinet_ntop
are unavailable (likely
on pre-Vista Windows), and the server falls back to usinginet_addr
andinet_ntoa
.
Binaries
The release includes the complete NetMount source code (server and DOS client) and server builds:
- 2 builds of server for Windows: for i686 and x86_64 (cross-compiled using MinGW on Linux, tested using Wine on Linux, and on Windows XP SP3)
- 4 builds of server for Linux: i686, x86_64, ARM aarch64 big endian, ARM aarch64 little endian (ARM binaries tested using QEMU)
The DOS client has not changed in this release; if needed, use DOS client builds from the older release https://github.com/jrohel/NetMount/releases/tag/client-v1.5.0%2Cserver-v1.2.0 .