Latest release of The Server Framework: 6.9.4

Version 6.9.4 of The Server Framework was released today.

This release includes changes to support Visual Studio 2019 (16.4), some new functionality and a bug fix to our OpenSSL ALPN handling code.

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

Bug fixes:

  • Bug fix to JetByteTools::OpenSSL::CAsyncConnector. We were dealing with ALPN callbacks incorrectly and this could cause an access violation.


  • Added a debug log message to alert you to the fact that a JetByteTools::IO::CAsyncFileLog instance has had OnPendingWriteLimit() called. This can seriously affect performance and is likely something that you want to be informed of!
  • Adjusted how we handle ‘bad record mac’ errors in JetByteTools::OpenSSL::CAsyncConnector::ProcessDecryptedData() so that we don’t leak information that could be used in a pad oracle attack.
  • Adjusted the errors that are deemed ‘fatal connection errors’ in JetByteTools::Socket::CStreamSocket::HandleError() these errors will cause OnConnectionReset() to be called and the connection closed automatically. This will affect how errors are handled for read and write completions and will remove the need for the client code to abort the connection explicitly in these cases. Errors now include WSAENETDOWN, WSAENETRESET, WSAETIMEDOUT, ERROR_SEM_TIMEOUT, ERROR_NETNAME_DELETED and ERROR_CONNECTION_ABORTED in addition to the previously handled WSAECONNRESET and WSAECONNABORTED.
  • Added JetByteTools::Socket::IStreamSocketConnectionManagerCallback::OnReadCompletionErrorMayNotBeFatalConnectionError() which is called instead of JetByteTools::Socket::IStreamSocketConnectionManagerCallback::OnReadCompletionError() and which calls JetByteTools::Socket::IStreamSocketConnectionManagerCallback::OnReadCompletionError() and returns true to indicate that the connection error is fatal and that the connection should be aborted. If you wish to allow some connection errors to be non-fatal then override this new function and check for your non-fatal errors and return false for them.
  • Added JetByteTools::Socket::IStreamSocketConnectionManagerCallback::OnWriteCompletionErrorMayNotBeFatalConnectionError() which is called instead of JetByteTools::Socket::IStreamSocketConnectionManagerCallback::OnWriteCompletionError(). This operates in exactly the same way as detailed for the new read completion handler above.