SocketWrench Release Notes

Version 7.2.7210.1848

  • Corrected a problem in the Internet Server component that could prevent the current thread from obtaining the handle to the socket for the client session. The server would accept the connection and the session would be active, but the host application would receive event notifications with an invalid handle value.
  • Modified the .NET components to return errorProductNotLicensed rather than the more ambiguous errorNotConnected in certain situations where a connection could not be established because the component has not been initialized with a runtime license key or the evaluation license has expired.
  • Added the traceProcess option for the TraceFlags property in all .NET components. By default, when the Trace option is used to enable logging, only network events for the current thread are logged. By specifying this option with the TraceFlags property, logging will be performed for the entire process, which is useful for multi-threaded applications that are creating instances of the SocketTools .NET components in worker threads.
  • Changed all .NET components to throw an exception if an invalid license key is specified using the RuntimeLicense attribute. This is an alternate method of providing the runtime license key to the components, rather than explicitly calling the Initialize method. This change is designed to assist developers who inadvertently specify an invalid license key and has no effect on applications that use the Initialize method.
  • Modified the License Manager utility to expand the display of the runtime license key and added a copy button that will copy the license key to the clipboard so that it can be easily pasted into the application source.

Version 7.2.7210.1845

  • Improved thread management in SocketWrench so that internal data structures are only allocated for threads using sockets, not all threads created by the process. This addresses an issue where an application would create a large number of worker threads over its lifetime, but not all of them were involved with network connections; this would result in memory being allocated that would never be used and not released until the application terminated.
  • Modified heap allocations to make them more efficient when a large number of sockets were created by an application. This primarily benefits server applications that need to maintain many active client connections.
  • Corrected a problem in the Internet Server component that could cause the internal table of client sessions to be corrupted. This would cause a memory leak and could potentially cause the server to consume excessive CPU cycles, become non-responsive or throw an exception and terminate the application.
  • Corrected a problem that could cause .NET applications to throw an exception if the Uninitialize method was called multiple times for any single instance of a class. Typically this was the result of a coding error in the application, however the components now ignore any extraneous calls to uninitialize an instance of a class that has already been uninitialized. Note that disposing of a class instance will destroy that instance and any attempts to re-initialize the class will still result in an exception being thrown.
  • Corrected a problem that could prevent a .NET component from establishing a secure connection if the Initialize method was called more than once. This could also result in the class instance throwing an exception if each call to the Initialize method was not matched with a call to the Uninitialize method. All .NET components were modified to gracefully handle situations where the calls to the Initialize and Uninitialize methods were mismatched over the lifetime of the instance, typically as the result of a coding error.
  • Corrected a problem where a component would create an empty licensing key under HKEY_CURRENT_USER on end-user systems. This was an issue on some systems where the application was executing with restricted privileges and had limited access to the registry.
  • Added SxS (registration free, side-by-side) manifests for the ActiveX controls, they can be found in the "Manifests" folder where SocketTools is installed. For more information on registration-free COM, refer to the MSDN article at http://msdn.microsoft.com/en-us/library/ms973913.aspx
  • Removed references to embedded ActiveX objects in the .NET HTML Help, and made some minor revisions to the HTML Help documentation for all libraries and components.

Version 7.2.7200.1824

  • Changed C++ classes to support methods that reference CString (CStringT) types if ATL is being used. Note that when using ATL, there are several macros which can affect how the CString class is defined and it depends on whether MFC is also being used. For more information, refer to the CStringT class documentation in the MSDN Library.
  • Updated several C++ class methods to use more appropriate default values for optional parameters. There were also a number of macros that were defined and used by the SocketTools class wrappers which have been renamed to avoid potential conflicts.
  • Corrected a problem where a component may return a "network not initialized" error when the real problem was an invalid runtime license key.
  • Corrected a problem where an ActiveX control would not initialize correctly if the Initialize method was called after another method, rather than being the first method called.
  • Corrected a problem in .NET components where errorInvalidHandle could be thrown rather than errorOperationNotSupported.
  • Changed the Initialize method to throw System.ObjectDisposedException if it is called after the the Dispose method, rather than simply failing silently.
  • Corrected a problem in the Dialer ActiveX control where setting the ThrowError property could throw an "invalid property value" exception.
  • Corrected a problem where the Initialize method would not actually validate a runtime license key if it previously validated a development license on the current system. This would prevent developers from detecting a problem with the license key until they deployed the application to another system.
  • Updated .NET components to throw System.IndexOutOfRangeException and System.ArgumentNullException rather than errorInvalidParameter where appropriate for various properties and methods.
  • Updated .NET components to handle errors more consistently across all components. Invalid property values should always throw an exception and never fire the OnError event. Methods should only throw exceptions if the ThrowError property is true.
  • The HostAddress property in the ActiveX controls and .NET components should always attempt to return the IP address associated with the HostName property if a connection has been established. This is independent of the value of the AutoResolve property.
  • The undocumented cData member of the SECURITYCREDENTIALS structure has been removed. This should have no impact on existing applications because this structure member should never have been referenced. The functions that use this structure only check for a minimum structure size, and will not return an error if actual structure size is larger. This ensures backwards compatibility with previous versions of the library.
  • Support for The PCT security protocol has been removed from all components. This security protocol has not been widely used, contains several known security vulnerabilities and is not being actively developed by Microsoft.
  • Support for TLS 1.1 and TLS 1.2 has been added, this requires Windows 7 or later versions. Clients will automatically negotiate for the highest version of TLS supported by the server. Windows XP and Windows Server 2003 will only support TLS 1.0.
  • Added the InetIsProtocolAvailable function that can be used to determine if a specific address family and socket type can be created.
  • Changed the InternetServer ClientHandle property array to accept a client name as well as a numeric index value.
  • Changed the InetRead, InetReadEx, InetWrite and InetWriteEx functions to support data buffers larger than 16K for secure connections.
  • Updated the documentation to be more consistent across the different editions of SocketTools and corrected many errors and omissions.

Version 7.1.7100.1638

  • Updated several sections of the documentation and corrected errors that included missing links to information about the INTERNET_ADDRESS structure and the functions that use it.

Version 7.1.7100.1621

  • There have been general improvements to network performance and IPv6 compatibility, and several issues have been resolved that were specific to IPv6 support on Windows XP, Windows Server 2003 and Windows Vista.
  • Internal changes to the Internet Server component and library have improved overall data transfer rates when large amounts of data are being exchanged with a client over a high-speed network.
  • Corrected a problem with the InternetDialer class that could cause a 32-bit application to throw an unhandled exception when the class was initialized on a 64-bit Windows system running under WoW64.
  • Corrected a problem that could cause an error message to be displayed when Data Execution Prevention (DEP) was enabled on the platform and an instance of an ActiveX control was created using CreateObject in VBScript or another scripting language.
  • Updated the PowerBasic examples and include files to support version 10 of the Windows compiler and version 6 of the console compiler. Note that these new function declarations include both ANSI and Unicode versions, and therefore are not backwards compatible with previous versions of PowerBasic. Developers using an earlier version of the language can request function declarations for older versions.
  • There have been general improvements and corrections to the documentation, and corrections to several internal help links that referenced invalid sections of the technical reference.
  • The installer will now include a separate copy of redistributable files, and this will include both 32-bit and 64-bit components, even if the installation is being performed on a 32-bit Windows system. 32-bit components are found in the x86 folder, and 64-bit components are found in the x64 folder.
  • The Windows 2000 platform is no longer considered a supported platform for SocketTools and all related products. While an application may continue to work under Windows 2000, we can no longer provide technical support for this version of Windows. The minimum supported platform for SocketTools is Windows XP with Service Pack 3 (SP3) installed. Note that Microsoft discontinued support for Windows 2000 and Windows XP SP2 in July, 2010 and those platforms are no longer receiving updates.

Version 7.0.7000.1451

  • Corrected a problem where an invalid IP address could be returned for a hostname on a Windows XP system that did not have an IPv6 stack installed and configured. When this error occurred, applications would work correctly on Windows 2000 and Windows 7 systems, but could not establish connections on a Windows XP system.
  • Corrected a problem where enabling logging could cause the current thread to discontinue writing to the logfile after a connection was made, and in some cases could cause the application to stop working or become non-responsive.

Version 7.0.7000.1431

  • All SocketWrench editions have been merged into a single product and now include .NET classes, ActiveX controls and standard Windows dynamic link libraries (DLLs). All of the security features in SocketWrench are enabled, providing support for secure client and server sessions using the SSL and TLS protocols.
  • Includes support for both IPv4 and IPv6 networking protocols. Currently, IPv4 continues to be the most widely used version of the protocol and remains the default used by the controls. An IPv6 connection will only be made if an IPv6 address is specified, or if the domain name for a given host resolves to an IPv6 address. The most significant change an application will need to make is to recognize the new IPv6 address format, and provide enough space to store an IPv6 address, which is larger than an IPv4 address.
  • Updated to include support for both 32-bit and 64-bit platforms. The .NET assemblies have been updated to target both x86 and x64 platforms, and both versions of the native interop libraries are included with the installation. Both 32-bit and 64-bit versions of the ActiveX controls and SocketWrench library are also included with the product.
  • All library functions in the SocketWrench API that used IP addresses in a binary (numeric) format have been changed. Previously, numeric IP addresses were passed as 32-bit unsigned integer values. To support IPv6 addresses, those functions have been changed to use a new INTERNET_ADDRESS structure that can accommodate both IPv4 and IPv6 addresses.
  • Functions that used DWORD parameters to pass state information to callback functions, primarily event handlers, have been modified to use the DWORD_PTR type. On 32-bit systems, this is a 32-bit unsigned integer and on 64-bit systems this is a 64-bit unsigned integer. This enables applications to pass memory addresses to the callback function without it being truncated.
  • When using the 64-bit version of the SocketWrench API, all handle values are 64-bit. As long as applications use the predefined types such as SOCKET, this change will be largely transparent. However, any application that makes an assumption about the size of a handle value should be reviewed. Note that as with standard Windows handles, only the lower 32 bits are significant.
  • Changed the behavior of the KeepAlive property and option so that, if enabled, keep-alive packets would be generated after a shorter period of time. If this property is set to true, the system will start sending keep-alive packets five seconds after the connection has become idle. If the remote host does not respond to these packets after a short period of time, the connection will be aborted.
  • A more explicit error code and description is returned when attempting to enable security options on a datagram (UDP) socket using the SocketWrench control. Secure connections are only supported with stream (TCP) sockets.
  • Updated the documentation for the version 7.0 release and example projects.