Latest release of The Server Framework: 6.9.5

Version 6.9.5 of The Server Framework was released today.

This release includes changes to support Visual Studio 2019 (16.5 - 16.9), some new functionality and a bug fixes.

As always, see the release notes here, for full details of all changes.

Bug fixes:

  • Bug fix in JetByteTools::SChannel::CServerContext::ContinueHandshake() so that we return HandshakeFatalError and set the last status correctly on failure rather than throwing an exception. This allows us to correctly report, or not, the issue to the other side.
  • Bug fix to JetByteTools::Socket::CFilterDataBase which prevents reference leaks.
  • Bug fix to JetByteTools::Socket::TStreamSocketConnectionManager<>::AsyncConnect() where we were failing to call ConnectionCreated() on the connection creator and this meant we weren’t limiting connections correctly.
  • Bug fix to JetByteTools::Win32::CRecursiveDirectorySearch in how we deal with access denied errors accessing directories.
  • Bug fix to JetByteTools::Win32::TZeroInitialiseExpandableBuffer<>::Resize() so that we zero fill the whole of the new buffer.


  • Added support for Visual Studio 2019 (16.5 - 16.9).
  • Updated project files to make release build optimisations consistent.
  • Rationalised precompiled header usage.
  • Removed unrequired includes.
  • Began to move towards removing JetByteTools\Win32Tools\Utils.h by splitting it into more functionally cohesive headers.
  • Added checking for _MSC_FULL_VER as well as _MSC_VER via JETBYTE_LATEST_TESTED_FULL_COMPILER_VERSION to determine compatibility.
  • Breaking change to JetByteTools::Win32::CSEHException which now derives from JetByteTools::Win32::CException. This means that if you want to catch JetByteTools::Win32::CSEHException explicitly, which you usually don’t, then you need to do so before catching JetByteTools::Win32::CException. Note that, in general, prefer to remove all reference to JetByteTools::Win32::CSEHException and rely on catching and processing as JetByteTools::Win32::CException as this will ease migration to cross platform code.
  • Breaking change to JetByteTools::Win32::CException. JetByteTools::Win32::CException::GetMessage() is now JetByteTools::Win32::CException::GetWhat(). This removes the mess that is caused by windows headers having a define for “GetMessage”. In general, switch you using GetDetails() rather than GetWhere() and GetWhat().
  • Changes to avoid explicitly catching JetByteTools::Win32::CSEHException now that it derives from JetByteTools::Win32::CException.
  • Added a move constructor to JetByteTools::IO::CBufferChainStoresNulls
  • Added JetByteTools::IO::CFixedFileHeaderRotatingAsyncFileLog which is a rotating log that can have some lines designated as ‘header lines’ that are included at the start of every new log file that is created.
  • Added GetLastErrorMessage.h and moved the functions out of Utils.h.
  • Added GUID.h and moved the functions GUIDAsString() and CreateGUIDAsString() out of Utils.h.
  • Added JetByteTools::Win32::IConfiguration::HasConfiguration() which returns true if a given sub configuration exists.
  • Added JetByteTools::Win32::IConfiguration::GetOptionalConfigurationOrNullConfiguration() which will return an instance of JetByteTools::Win32::CNullConfiguration if the optional configuration does not exist. This allows use of the ’null object pattern’ during configuration processing.
  • Added JetByteTools::Win32::IConfiguration::Visit which takes an instance of an object that implements JetByteTools::Win32::IVisitConfigurationElements which is called for each element in the configuration.
  • Added JetByteTools::Win32::CMD5 an MD5 implementation that doesn’t rely on Windows API calls. If JETBYTE_TOOLS_USE_WINDOWS_NATIVE_MD5 is defined then this implementation forwards to the code in Win32::GetMD5Digest() if not defined then an implementation from is used.
  • Added JetByteTools::Win32::SHA1 a SHA1 implementation that doesn’t rely on Windows API calls. If JETBYTE_TOOLS_USE_WINDOWS_NATIVE_SHA1 is defined then this implementation forwards to the code in Win32::GetSHA1Hash() if not defined then an implementation from is used.
  • Added JetByteTools::Win32::CStringConverter::AtoT(), etc. overrides where the input and output are provided as pointers and lengths and where the output is a pointer and length and the input is a pointer which has strlen called on it.
  • Added static methods to JetByteTools::Win32::CSystemTime. JetByteTools::Win32::CSystemTime::GetSystemTime() and JetByteTools::Win32::CSystemTime::GetLocalTime().
  • Added static method to JetByteTools::Win32::CTickCount64Provider. JetByteTools::Win32::CTickCount64Provider::TickCount64().
  • Added static method to JetByteTools::Win32::CTickCountProvider. JetByteTools::Win32::CTickCount64Provider::TickCount().