SocketTools 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.
- Corrected a problem with the Localize property in the HTTP ActiveX and .NET component that could prevent a file date from being adjusted for the local timezone if the server was returning the date and time using the GMT timezone.
- Corrected a problem with the PostFile method in the HTTP .NET component where the method would fail when a URL was used unless the caller had explicitly established a connection with a previous call to the Connect method.
- 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.
- Added support for SASL PLAIN authentication in IMAP in addition to the default authentication method. For the broadest compatibility with the different types of IMAP servers, it is recommended that you continue to use default authentication whenever possible.
- Added the IMAP_OPTION_IDENTIFY connection option to specify the client should identify itself to the IMAP server. If the server supports the ID command, this option will specify that the client should use it to identify itself. Although this is an optional extension to the protocol standard, some servers may require this to establish a connection.
- Added the IMAP_LIST_INFERIOR option to return inferior mailboxes by default using the ImapGetFirstMailbox and ImapGetNextMailbox functions. This specifies that the client wishes to obtain a list of all mail folders, including sub-folders, and not just the top-level folders.
- The IMAP ActiveX control and .NET component were modified to include inferior mailboxes (sub-folders) by default when enumerating the list of available mailboxes on the server. To prevent this behavior, set the MailboxMask property to the value "%" and this will cause only top-level mailboxes to be returned by the Mailbox property array.
- Changed the IMAP components to request supported features before and after authentication, since some servers only return a subset of supported features before a client authenticates. This resolves a problem where the client would not recognize that the server supported a particular option and instead would return an error to the caller.
- Corrected a problem with the TelnetSearch, SshSearch and RshSearch functions that would cause them to return an empty buffer to the caller when the server returned matching data. This change also addressed an internal inconsistency with how the TelnetSearch and SshSearch functions worked.
- Added the TelnetReadLine and TelnetWriteLine functions to the Telnet API to make it easier to read and write lines of text. These functions work in the same fashion as their counterparts in the SSH API. ReadLine and WriteLine methods were also added to the Telnet ActiveX control and .NET component.
- Corrected a problem with the TelnetLogin function and Login methods where they would not return an error if the user credentials were invalid. The authentication code was improved to recognize additional error messages, making it compatible with a larger variety of Telnet servers.
- Added the SshGetLineMode and SshSetLineMode functions to the SSH API to control how end-of-line character sequences are sent to the server. This addresses an issue where a server may see text copied from another source (such as a text file or the clipboard) as having extraneous newlines. A property named NewLine was added to the ActiveX control and .NET component to provide the same functionality.
- Corrected a problem with the SshWrite function that could cause the application to crash if a NULL buffer pointer or a buffer size of less than zero was provided by the caller. Both the SshWrite and SshRead functions now perform more stringent parameter validation checks.
- Corrected a problem in the FtpClient and FileTransfer .NET classes where the file type property may not be set correctly after calling the Connect method. This could result in corrupted files when the file type and the transfer mode did not match.
- 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 an invalid file name to be returned when calling FtpGetFileStatus if the server responded to the STAT command with file information in MLST format. This change also addresses the same potential problem when calling the GetFileStatus method in the ActiveX control or .NET component.
- Added support for FTP file listings using the MLSD command. A new directory format named FTP_DIRECTORY_MLSD has been defined, and that value should be passed to the FtpSetDirectoryFormat function. Note that file listings will continue to use the standard LIST command by default; this format is only provided as an option and must be explicitly selected. The DirectoryFormat property in the ActiveX control and .NET component can be used to select this new format.
- 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
- Corrected a number of function declarations in cstools7.inc, the include file used by PowerBASIC projects for function declarations and constants.
- 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
- Added the new Text Message API, C++ class, .NET class and ActiveX control. These components enable an application to send SMS text messages to a mobile device using a wireless carrier's gateway service. Refer to the Technical Reference documentation for more information.
- 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.
- Added variants of the GetData methods in the FTP and HTTP C++ classes to make it easier to work with string buffers.
- Corrected a problem in the MimExportMessageEx function that could truncate the last character of a message if MIME_EXPORT_MEMORY was used. This could also potentially affect the ExportMessage method in the ActiveX control and .NET classes.
- 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 HttpPostFile and the HttpClient.PostFile method that could cause the file data to be truncated under rare circumstances.
- Corrected a problem in the Terminal ActiveX control that could cause an application created using Visual Basic 6.0 to GPF on Windows XP.
- Corrected a problem in .NET components where errorInvalidHandle could be thrown rather than errorOperationNotSupported.
- Corrected a problem in FileTransfer .NET component where setting the Timeout period would not affect HTTP transfers.
- 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, requiring Windows 7 or later versions. Clients will automatically negotiate for the highest version of TLS supported by the server. Note that Windows XP and Windows Server 2003 will currently only support TLS 1.0.
- Specifying an invalid file type to FtpSetFileType will no longer disable automatic file type detection for subsequent transfers.
- Added the FtpGetFileType function. This function has always existed, however it was undocumented and was not exported by the library. For more information, refer to the Technical Reference.
- Added the FtpGetText and FtpPutText functions. These functions simplify uploading and downloading textual data using FTP, and work with both ANSI and Unicode strings. For more information, refer to the Technical reference.
- Added the HttpGetText and HttpPutText functions. These functions simplify uploading and downloading textual data using HTTP, and work with both ANSI and Unicode strings. For more information, refer to the Technical reference.
- Added the MimeGetAllRecipients function and MailMessage.AllRecipients property to return a comma separated list of all message recipients. This was added to make it easier to specify a list of recipients when submitting a message to an SMTP server.
- Added the HttpEnableCompression function and the HTTP_TRANSFER_COMPRESS option for HttpGetData and HttpGetFile. This option informs the server that the client is capable of accepting compressed data. If the server does returned compressed data, the components will automatically expand the data before returning it to the application.
- Added the Compression property to the HTTP .NET and ActiveX controls. If this property is set to true, the server is informed that the client is capable of accepting compressed data. If the server does returned compressed data, the components will automatically expand the data before returning it to the application.
- Changed HttpGetData, HttpGetFile, HttpGetText to accept URLs as the resource parameter. This change will simplify code where the caller is providing a URL, since it will no longer be necessary to parse the URL to obtain just the remote file path or resource name.
- Corrected a problem where HTTP_TRANSFER_CONVERT could corrupt compressed text returned by the server. If an application advertised support for compressed textual data and handled the compression itself, this option could prevent the data from being expanded. With the inclusion of the new HTTP_TRANSFER_COMPRESS option, these two options will work correctly to expand and transform the end-of-line character sequence for textual data.
- Corrected a problem in the File Transfer control where the priority would be ignored for HTTP transfers.
- The HttpConnectUrl, HttpDownloadFile(Ex) and HttpUPloadFile(Ex) functions will no longer attempt to perform autoproxy discovery unless HTTP_OPTION_PROXY is specified; this can significantly reduce the amount of time required for the function to complete.
- Deprecated the FtpFileList function, programs should use FtpGetFileList instead.
- Added the FtpGetFileList function to return an unparsed file listing in a string buffer and is supported by FTP/FTPS and SFTP.
- Added the FtpEnumFiles and FtpEnumFilesEx functions to enumerate all files in a directory.
- Removed declarations for the deprecated FtpGetFileMask and FtpSetFileMask functions, they were undocumented and did nothing.
- Corrected a problem with FtpOpenDirectory and the OpenDirectory method when the directory name only contained a wildcard mask.
- Added the SmtpSubmitMessage function that provides a high-level interface for submitting an e-mail message for delivery without requiring the separate use of the MIME API to compose the message. For more information, refer to the Technical Reference documentation.
- Improved how the MIME and SMTP libraries handle e-mail addresses that are surrounded in quotes.
- Added the MimeEnumAttachments function that enumerates all file attachments in a message.
- Added the MimeExtractAllFiles function that extracts all file attachments, storing them in the specified directory.
- Added the MimeExtractFileEx function that can search for attachments, or extract an attachment in a specific message part.
- Added the MimeFindAttachment function that can search for an attached file name.
- Added the MimeGetAllHeaders function the returns all of the RFC822 header values in a string buffer.
- Improved the MIME message parser, with more tolerance for messages that don't strictly conform to the RFC822 or MIME standards.
- Improved how the MimeSetMessageHeader function and SetHeader method checks header values and ensures the caller cannot add headers that would violate the standard.
- 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.
- Corrected a problem where calling FtpCancel during a file transfer using SSH would cause subsequent function calls to fail with ST_ERROR_OPERATION_CANCELED until the connection was closed.
- Changed the GetData and PutData methods in the FtpClient and HttpClient classes to support MemoryStream objects.
- Added the MimeCreateMessageEx function that will create a new message based on the contents of a file or string buffer.
- Modified FtpOpenFile, FtpGetData, FtpGetFile, FtpPutData, FtpPutFile to accept a URL as the remote file name.
- Changed the FtpConnectUrl and HttpConnectUrl functions so they will accept a URL without an explicit schema.
- Added the FtpValidateUrl and HttpValidateUrl functions.
- Updated the documentation to be more consistent across the different editions of SocketTools and corrected many errors and omissions.
Version 7.1.7100.1638
- Corrected a problem with the FTP components where transfer restart byte offsets would be ignored even if the FTP server supported the option and the entire file would be transferred.
- Modified the FTP components to return a more meaningful error code when attempting to append data to a file and specifying a restart byte offset greater than zero. The control will now return an error indicating that the operation is not supported. File transfers that append data are mutually exclusive with restarted file transfers.
- When a connection is initially established with an FTP server, the component will now explicitly send the TYPE I command to specify that the default transfer mode should be binary. Most servers default to binary mode transfers, but this change will ensure that the transfer mode is consistent across all server types and not depend on their configuration to specify the default transfer mode.
- Corrected a problem with the FTP components where the GetFileSize method could return an incorrect error code, indicating that a file does not exist on the server when the file does exist and the user has permission to access it. This would occur if the server rejects the SIZE command because the current file transfer mode is text, not binary. The component will now correctly return an error indicating that the operation is not supported.
- Corrected a problem with the MailMessage and InternetMail components where the incorrect number of message recipients would be returned under certain circumstances, such as a malformed address or extraneous comma or semi-colon characters in the address.
- 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.
- Corrected a problem with the MIME components that could result in a memory leak if the message contained a large number of file attachments, or contained a single large attachment.
- Corrected a problem with the MIME components when decoding a very large attachment that was encoded using base64. It could cause the application to become non-responsive or generate an exception and terminate unexpectedly.
- Corrected a problem with the SSH and FTP components where an IPv6 connection could not be established under some circumstances. Typically this would occur on systems that were using Toredo tunneling rather than an actual IPv6 network connection.
- Improved how authentication is handled with SSH and SFTP to provide support for servers who only accepted keyboard interactive authentication, where they expected the user to interactively enter a password at the keyboard.
- Corrected a problem where attempting to append to a file that did not exist would fail when using SFTP, but not with standard FTP. If an attempt is made to append data to file that does not exist, the component will always attempt to create a new file.
- Corrected a problem with SSH and SFTP that could cause multiple disconnection messages to be sent to the server when the client closed the connection. Most servers would simply ignore the additional messages, but in some cases it would cause problems with specific servers.
- Corrected a problem with the SSH component that could cause data corruption when communicating with servers running an older implementation of SSH, typically those found in routers and other network devices.
- Improved compatibility with some NAT routers and active mode FTP file transfers that would prevent the server's data connection from being established on a specific range of ports.
- 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.
- 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.
.NET Components
- Corrected a problem in the FtpClient class where setting the Passive property after a connection was established would not change the client into passive or active mode, depending on the changed value.
- Adjusted the internal buffer values used when setting a transfer priority for either FTP or HTTP, and made changes to normalize those values to prevent an unexpected error condition during file transfers. This change should also improve the overall transfer rates for large files over high-speed Internet connections.
- 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 with the Terminal emulation class that could cause an application to throw an unhandled exception when targeting 64-bit Windows or when targeting "Any CPU" and the application was deployed to a 64-bit Windows system.
ActiveX Controls
- Corrected a problem in the FtpClient control where setting the Passive property after a connection was established would not change the client into passive or active mode, depending on the changed value.
- 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.
- The legacy Scripting Edition components that were included in previous versions have been removed from the version 7.1 installer and are no longer included with the product. They will be made available through a separate download link for those developers who require them. Note that those components are considered deprecated, are no longer supported and should be replaced by references to the ActiveX controls.
Dynamic Link Libraries
- 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.
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
- 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 libraries are also included in the product.
- Includes a new news feed (RSS) component that can be used to download and parse feeds from a remote web server, or from an XML file on the local system. For more information, refer to the technical reference documentation.
- Updated for full compatibility with Windows 7 SP1 and Windows Server 2008 R2, with improvements in performance and functionality. It is recommended that applications which target these platforms upgrade to the current version.
- Updated the documentation for the version 7.0 release and example projects.
.NET Components
- An improvement was made in the MailMessage class with regards to how HTML content is processed inside the class, particularly when the message contains HTML that is composed as a single, long line of text.
- Modified the GetFile method in the HttpClient class to be more efficient and use less memory during the transfer process, particularly when downloading very large files.
- Changed the PostData and SubmitForm methods in the HttpClient class to always set the Content-Type header if it has not been explicitly set by the application, even when the data being submitted to the server has not actually been encoded.
- Changed the SubmitForm method in the HttpClient class to perform stricter checks on the parameters provided by the caller when a byte array is specified, preventing the possibility of an internal buffer overrun.
- Changed the behavior of the SocketWrench KeepAlive property 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 class. Secure connections are only supported with stream (TCP) sockets.
ActiveX Controls
- An improvement was made in the MailMessage control with regards to how HTML content is processed inside the class, particularly when the message contains HTML that is composed as a single, long line of text.
- Modified the GetFile method in the HttpClient control to be more efficient and use less memory during the transfer process, particularly when downloading very large files.
- Changed the PostData and SubmitForm methods in the HttpClient control to always set the Content-Type header if it has not been explicitly set by the application, even when the data being submitted to the server has not actually been encoded.
- Changed the SubmitForm method in the HttpClient control to perform stricter checks on the parameters provided by the caller when a byte array is specified, preventing the possibility of an internal buffer overrun.
- Changed the behavior of the SocketWrench KeepAlive property 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.
Dynamic Link Libraries
- All functions 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 SocketTools API, all handle values are 64-bit. As long as applications use the predefined types such as HCLIENT, 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.
- Extended versions of several FTP and HTTP functions and structures have been added to support large file transfers over 4GB. The extended functions are available on both 32-bit and 64-bit platforms. These functions are: FtpOpenFileEx, FtpGetFileEx, FtpPutFileEx, FtpGetFileSizeEx, FtpGetFileStatusEx, FtpGetFirstFileEx, FtpGetNextFileEx, FtpGetTransferStatusEx, FtpDownloadFileEx, FtpUploadFileEx, HttpCreateFileEx, HttpOpenFileEx, HttpGetFileEx, HttpPutFileEx, HttpGetFileSizeEx, HttpGetTransferStatusEx, HttpDownloadFileEx, HttpUploadFileEx.
- An improvement was made in the MIME library with regards to how HTML content is processed, particularly when the message contains HTML that is composed as a single, long line of text.
- Modified the HttpGetFile function to be more efficient and use less memory during the transfer process, particularly when downloading very large files.
- Changed the HttpPostData and HttpSubmitForm functions to always set the Content-Type header if it has not been explicitly set by the application, even when the data being submitted to the server has not actually been encoded.
- Changed the HttpSubmitForm function to perform stricter checks on the parameters provided by the caller when a byte array is specified, preventing the possibility of an internal buffer overrun.
- Changed the behavior of the INET_OPTION_KEEPALIVE 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 API. Secure connections are only supported with stream (TCP) sockets.