It appears that some of the mswsock.dll functions get called on
Windows 98 in a context where calling any of the printf functions
provided by the CRT causes subtle memory corruption which doesn't
manifest until the process exits, triggering a page fault in
KERNEL32.DLL and making the system unusable.
1990s Windows makes me miss the sophistication of 1970s UNIX.
This introduces "packet coalescing" for the DOSBox transport - when an
application is sending an absurd number of tiny IPX packets in rapid
succession we try to batch them up into a container packet to be sent
through the DOSBox server.
This will hopefully improve how certain games behave when using the
DOSBox transport option, but will break compatibility with anything not
specifically supporting this special message framing.
These tools can be used to measure RTT, packet loss, and sendto()/recv() call
duration on one end with a specified minimum delay between sendto() calls to
emulate some different loads.
Dump most of the old "unit" tests which were more system tests and only tested
a small amount of functionality against the host.
The new test suite is a lot more thorough and tests an arbitrary Windows version
over the network rather than testing within the host's WinSock environment.
More documentation detailing how to run this will follow.
Various fixups to build under win-builds.org toolchain rather than MinGW. No
longer builds under MinGW as I have removed headers/definitions that it lacks.
Detect multiple sockets bound to the same address within a session by creating
a named mutex. Multiple handles to a mutex may exist and closing the last one
destroys it.
multiple IPXWrapper processes without needing a shared router thread.
Replaced router/rclient code with a single, per-process router thread.
Add addresses to the cache in the router main loop rather than winsock recv
functions.
Packets are no longer preceeded by an rpacket_header structure when relayed to
the local UDP sockets.
Each IPXWrapper instance creates a "private" UDP socket bound to a random port
on INADDR_ANY which is used for sending all packets and receiving unicast.
Bugfix: Check source socket number before relaying to a connected socket.