SocketTools Release Notes

SocketTools 6.0 Build 6020

.NET Assemblies
  • Expanded the options available for the DnsClient class to enable applications to have more control over how nameserver queries are performed, the order in which they're performed, whether queries are recursive and if nameservers are promoted based on successfully resolving a domain name. These changes were made to address issues where the client application had limited control over the actual process of querying the nameserver using the default options.
  • Modified the internal process in how nameservers are queried when a local domain name has been specified, resulting in an overall improvement in performance when resolving a fully qualified domain name. By default, the library would perform multiple queries using the local domain name that were not necessary, and if one of the nameservers was not responsive, it could significantly increase the amount of time required to resolve the hostname to an IP address.
  • Addressed a problem with the DnsClient class where an incorrect IP address could be returned for a domain name if the local system was configured with a domain suffix. This issue would only occur with certain nameservers, typically those provided by Internet Service Providers (ISPs) to home users.
  • Added an option to improve support for connections where tunneling or port-forwarding is used. This option is available for both standard and secure connections, and tells the class that it should not make any assumptions about the type of connection that is being established based on the port number. If the FtpClient class is being used and FtpOptions.optionTunnel is specified, this will also automatically enable the firewall support features and force the connection to be passive, so that all client connections are outbound to the server. It is also important to note that specifying this option requires you to explicitly specify if the connection should be secure or not; the default security options will not be enabled based on the service port number. For example, this option could be used to establish a standard, non-secure connection to a webserver on port 443 which is normally reserved for secure connections.
  • The FtpClient and HttpClient classes will recognize URLs passed to the Connect method. This change was made to address an issue where users could enter a URL rather than just a hostname, and when the application passed that value to the connection function, it would fail. With this change, if a URL is specified it will be parsed and the connection will be established using the specified domain name and port number. Note that the additional arguments passed to the method, such as the port number and connection options, will override the default values associated with the URL.
  • The FtpOptions.NATRouter option has been deprecated and should no longer be used. It has been renamed FtpOptions.optionFirewall, which implements the same basic functionality as well as enabling some additional internal features which are designed to ensure broad compatibility with both clients and servers that operate behind firewalls. Note that this option will force the client into passive mode, with all data channel connections being outbound from the local system to the remote server.
  • Added the Encoding property and FtpEncoding enumeration to the FtpClient class to specify how filenames are encoded when sent to the server. By default, the FtpClient class will use the default ANSI encoding for filenames, however if the server supports UTF8 encoding for internationalized filenames, the client can enable this by setting the encoding type to FtpEncoding.encodingUTF8. Note that the server must fully support UTF-8 encoding for filenames, and some servers may advertise support for UTF-8 encoded filenames even though the underlying filesystem does not support them, which can result in unexpected behavior by the client application.
  • Corrected a problem with the HttpClient class where automatic redirection wasn't working correctly with virtual hosts because the wrong hostname was being specified in the request header after the redirected connection was established. This problem would manifest as the Connect method returning an error after making three connection attempts to the server using the redirected URL.
  • Updated the Idle method in the ImapClient class to work using a separate thread to monitor status changes reported by the server. The idle status monitoring supports two modes, blocking and non-blocking where an application can be notified of changes to the mailbox by implementing an event handler for the OnUpdate event.
  • Added the IsIdle property to the ImapClient class, which enables an application to check whether the client session is currently processing idle notifications from the server. If this property returns a value of true, it means that the idle monitoring thread has been created and the client is in an idle state.
  • Changed the GetHeader method and MessageFrom property in the PopClient class so that they no longer depend exclusively on POP3 protocol command extensions such as XTND XLST and SENDER. If the server does not support these extensions, the class will default to retrieving and parsing the complete message header block for the specified message, enabling these functions to be used with all servers.
  • Corrected a reference counting problem where the memory allocated for the last message that has been retrieved using the PopClient class would not always be freed when multiple connections were established by the same process, and then one of those connections were closed.
  • Corrected a problem with the PopClient class where an error would be returned indicating that a feature was not available, when the actual problem was that the message number specified by the application was incorrect (i.e.: the message does not exist on the server or the message has been deleted). This error message would cause confusion when an application would use the LastErrorString property value to display an error to the end-user. For example, if the application attempted to retrieve a message using an invalid message number, the user would see an error message stating that retrieving the message was not a supported feature. The error message now correctly reflects that the problem is the message number is invalid.
  • Corrected a problem with the MailMessage class where a message may not decode correctly if it contained an attachment with a file name that was longer than 127 characters. The class would not see that message part as containing a file attachment, which would prevent it from being extracted from the message and stored in a file.
  • Corrected a problem where the MailMessage class may not detect that a message contains file attachments, even though the multipart header values are correct for the section of the message that contains the attachment. This problem was related to an issue where attachments with long file names could not be extracted, however this problem could also manifest with shorter file names that were encoded.
  • Changed the SmtpClient class to perform more stringent checking of the local hostname that is specified when calling the Connect method. If the hostname is not a valid, fully qualified domain name the class will attempt to use the domain name configured for the local system, or will default to simply using the local system's IP address. This change addresses an issue where an invalid local domain name could cause SMTP servers to reject an otherwise valid submission by the client application.
  • Corrected a problem with the IcmpClient class where attempting to send ICMP ECHO datagrams to a remote host could result in "access denied" errors under Windows Vista and Windows 7 unless the process was running with administrative privileges.
  • Corrected a problem with the IcmpClient class where ECHO datagrams could be sent successfully, however the API would intermittently report errors indicating that the message sequence IDs mismatched. This problem most commonly manifested itself when the ICMP error messages would be returned to the caller by an intermediate router indicating that the host was unreachable.
  • Corrected a problem where incorrect error messages could be returned by the IcmpClient class, particularly when there were multiple ICMP ECHO datagrams being sent by the same application using the Echo or TraceRoute methods in different threads, and some of those requests timed out. Subsequent failures could return error codes associated with previously failed transactions rather than indicating the problem with the current operation.
  • Updated the GetArticle method in the NntpClient class to accept a message ID string as well as an article number.
  • Changed how asynchronous socket I/O notifications are handled by the SocketWrench class to address situations in which the application suspends processing messages for a period of time or with applications running on a system under high load. This change should improve situations in which network event notifications appear to stall or stop firing after a period of time until the application performs a network I/O function such as reading data from the socket.
  • Corrected a problem where the status of a server's credentials was not being updated correctly when a secure connection was established using any of the secure networking classes. This could cause the class to report that the certificate should not be trusted, even though it was valid.
  • Modified how security credentials are processed when a secure connection is established. If the CertificateStore property specifies a valid file name, it will automatically load the certificate from that file rather than the registry. The certificate file must be in PKCS12 (PFX) format and it must contain the private key that is associated with the certificate. In addition, if the CertificateStore property specifies as string that begins with "HKCU:" then the specified certificate will be loaded from the current user's certificate store; if the string begins with "HKLM:" then the specified certificate will be loaded from the local machine store instead.
  • Changed the library that performs the debug logging to perform a more stringent version compatibility check. If developers are using the Trace, TraceFile and TraceFlags properties in their applications, they should always make sure that the matching version of the debugging library SocketTools.TraceLog.dll be included alongside their application executable. This corrects a problem where mismatched versions of the library could cause the application to crash. If the versions do not match, the class will silently refuse to load the library and the debug logging features will be disabled.
  • The SocketTools .NET assemblies are no longer digitally signed using an AuthentiCode certificate. This change was made because the .NET framework would attempt to validate digitally signed assemblies and establish an Internet connection to determine if the certificate was still valid. This could cause significant delays in the application loading if it was behind a firewall or there was anti-virus software that was preventing the outbound connection. Note that the assemblies still have strong names and are cryptographically signed, this change is only in regards to the AuthentiCode digital signature. Developers who require versions of the assemblies that have been signed using AuthentiCode can contact technical support and request them. For more information, refer to Microsoft knowledge base article 936707
ActiveX Controls
  • Expanded the options available for the DnsClient control to enable applications to have more control over how nameserver queries are performed, the order in which they're performed, whether queries are recursive and if nameservers are promoted based on successfully resolving a domain name. These changes were made to address issues where the client application had limited control over the actual process of querying the nameserver using the default options.
  • Modified the internal process in how nameservers are queried when a local domain name has been specified, resulting in an overall improvement in performance when resolving a fully qualified domain name. By default, the library would perform multiple queries using the local domain name that were not necessary, and if one of the nameservers was not responsive, it could significantly increase the amount of time required to resolve the hostname to an IP address.
  • Addressed a problem with the DnsClient control where an incorrect IP address could be returned for a domain name if the local system was configured with a domain suffix. This issue would only occur with certain nameservers, typically those provided by Internet Service Providers (ISPs) to home users.
  • Added an option to improve support for connections where tunneling or port-forwarding is used. This option is available for both standard and secure connections, and tells the class that it should not make any assumptions about the type of connection that is being established based on the port number. If the FtpClient control is being used and ftpOptionTunnel is specified, this will also automatically enable the firewall support features and force the connection to be passive, so that all client connections are outbound to the server. It is also important to note that specifying this option requires you to explicitly specify if the connection should be secure or not; the default security options will not be enabled based on the service port number. For example, this option could be used to establish a standard, non-secure connection to a webserver on port 443 which is normally reserved for secure connections.
  • The FtpClient and HttpClient controls will recognize URLs passed to the Connect method. This change was made to address an issue where users could enter a URL rather than just a hostname, and when the application passed that value to the connection function, it would fail. With this change, if a URL is specified it will be parsed and the connection will be established using the specified domain name and port number. Note that the additional arguments passed to the method, such as the port number and connection options, will override the default values associated with the URL.
  • The ftpOptionNATRouter option has been deprecated and should no longer be used. It has been renamed ftpOptionFirewall, which implements the same basic functionality as well as enabling some additional internal features which are designed to ensure broad compatibility with both clients and servers that operate behind firewalls. Note that this option will force the client into passive mode, with all data channel connections being outbound from the local system to the remote server.
  • Added the Encoding property to the FtpClient control to specify how filenames are encoded when sent to the server. By default, the FtpClient control will use the default ANSI encoding for filenames, however if the server supports UTF8 encoding for internationalized filenames, the client can enable this by setting the encoding type to ftpEncodingUTF8. Note that the server must fully support UTF-8 encoding for filenames, and some servers may advertise support for UTF-8 encoded filenames even though the underlying filesystem does not support them, which can result in unexpected behavior by the client application.
  • Corrected a problem with the HttpClient control where automatic redirection wasn't working correctly with virtual hosts because the wrong hostname was being specified in the request header after the redirected connection was established. This problem would manifest as the Connect method returning an error after making three connection attempts to the server using the redirected URL.
  • Updated the Idle method in the ImapClient control to work using a separate thread to monitor status changes reported by the server. The idle status monitoring supports two modes, blocking and non-blocking where an application can be notified of changes to the mailbox by implementing an event handler for the OnUpdate event.
  • Changed the GetHeader method and MessageFrom property in the PopClient control so that they no longer depend exclusively on POP3 protocol command extensions such as XTND XLST and SENDER. If the server does not support these extensions, the class will default to retrieving and parsing the complete message header block for the specified message, enabling these functions to be used with all servers.
  • Corrected a reference counting problem where the memory allocated for the last message that has been retrieved using the PopClient control would not always be freed when multiple connections were established by the same process, and then one of those connections were closed.
  • Corrected a problem with the PopClient control where an error would be returned indicating that a feature was not available, when the actual problem was that the message number specified by the application was incorrect (i.e.: the message does not exist on the server or the message has been deleted). This error message would cause confusion when an application would use the LastErrorString property value to display an error to the end-user. For example, if the application attempted to retrieve a message using an invalid message number, the user would see an error message stating that retrieving the message was not a supported feature. The error message now correctly reflects that the problem is the message number is invalid.
  • Corrected a problem with the MailMessage control where a message may not decode correctly if it contained an attachment with a file name that was longer than 127 characters. The class would not see that message part as containing a file attachment, which would prevent it from being extracted from the message and stored in a file.
  • Corrected a problem where the MailMessage control may not detect that a message contains file attachments, even though the multipart header values are correct for the section of the message that contains the attachment. This problem was related to an issue where attachments with long file names could not be extracted, however this problem could also manifest with shorter file names that were encoded.
  • Changed the SmtpClient control to perform more stringent checking of the local hostname that is specified when calling the Connect method. If the hostname is not a valid, fully qualified domain name the class will attempt to use the domain name configured for the local system, or will default to simply using the local system's IP address. This change addresses an issue where an invalid local domain name could cause SMTP servers to reject an otherwise valid submission by the client application.
  • Corrected a problem with the IcmpClient control where attempting to send ICMP ECHO datagrams to a remote host could result in "access denied" errors under Windows Vista and Windows 7 unless the process was running with administrative privileges.
  • Corrected a problem with the IcmpClient control where ECHO datagrams could be sent successfully, however the API would intermittently report errors indicating that the message sequence IDs mismatched. This problem most commonly manifested itself when the ICMP error messages would be returned to the caller by an intermediate router indicating that the host was unreachable.
  • Corrected a problem where incorrect error messages could be returned by the IcmpClient control, particularly when there were multiple ICMP ECHO datagrams being sent by the same application using the Echo or TraceRoute methods in different threads, and some of those requests timed out. Subsequent failures could return error codes associated with previously failed transactions rather than indicating the problem with the current operation.
  • Updated the GetArticle method in the NntpClient control to accept a message ID string as well as an article number.
  • Changed how asynchronous socket I/O notifications are handled by the SocketWrench control to address situations in which the application suspends processing messages for a period of time or with applications running on a system under high load. This change should improve situations in which network event notifications appear to stall or stop firing after a period of time until the application performs a network I/O function such as reading data from the socket.
  • Corrected a problem where the status of a server's credentials was not being updated correctly when a secure connection was established using any of the secure networking classes. This could cause the control to report that the certificate should not be trusted, even though it was valid.
  • Modified how security credentials are processed when a secure connection is established. If the CertificateStore property specifies a valid file name, it will automatically load the certificate from that file rather than the registry. The certificate file must be in PKCS12 (PFX) format and it must contain the private key that is associated with the certificate. In addition, if the CertificateStore property specifies as string that begins with "HKCU:" then the specified certificate will be loaded from the current user's certificate store; if the string begins with "HKLM:" then the specified certificate will be loaded from the local machine store instead.
  • Changed the library that performs the debug logging to perform a more stringent version compatibility check. If developers are using the Trace, TraceFile and TraceFlags properties in their applications, they should always make sure that the matching version of the debugging library cstrace6.dll be included alongside their application executable. This corrects a problem where mismatched versions of the library could cause the application to crash. If the versions do not match, the class will silently refuse to load the library and the debug logging features will be disabled.
Dynamic Links Libraries
  • Expanded the options available for the DNS API to enable applications to have more control over how nameserver queries are performed, the order in which they're performed, whether queries are recursive and if nameservers are promoted based on successfully resolving a domain name. These changes were made to address issues where the client application had limited control over the actual process of querying the nameserver using the default options.
  • Added the functions DnsGetResolverOptions and DnsSetResolverOptions to enable an application to dynamically adjust the options available after the client session handle had been created.
  • Modified the internal process in how nameservers are queried when a local domain name has been specified, resulting in an overall improvement in performance when resolving a fully qualified domain name. By default, the library would perform multiple queries using the local domain name that were not necessary, and if one of the nameservers was not responsive, it could significantly increase the amount of time required to resolve the hostname to an IP address.
  • Addressed a problem with the DNS API where an incorrect IP address could be returned for a domain name if the local system was configured with a domain suffix. This issue would only occur with certain nameservers, typically those provided by Internet Service Providers (ISPs) to home users.
  • Added an option to improve support for connections where tunneling or port-forwarding is used. This option is available for both standard and secure connections, and tells the API that it should not make any assumptions about the type of connection that is being established based on the port number. If the FTP API is being used and the option FTP_OPTION_TUNNEL is specified, this will also automatically enable the firewall support features and force the connection to be passive, so that all client connections are outbound to the server. It is also important to note that specifying this option requires you to explicitly specify if the connection should be secure or not; the default security options will not be enabled based on the service port number. For example, this option could be used to establish a standard, non-secure connection to a webserver on port 443 which is normally reserved for secure connections.
  • The FTP and HTTP APIs will now recognize URLs passed to the standard connection functions (e.g.: FtpConnect, HttpConnect, etc.) This change was made to address an issue where users could enter a URL rather than just a hostname, and when the application passed that value to the connection function, it would fail. With this change, if a URL is specified it will be parsed and the connection will be established using the specified domain name and port number. Note that the additional arguments passed to the function, such as the port number and connection options, will override the default values associated with the URL.
  • The FTP_OPTION_NATROUTER option has been deprecated and should no longer be used. It has been renamed FTP_OPTION_FIREWALL, which implements the same basic functionality as well as enabling some additional internal features which are designed to ensure broad compatibility with both clients and servers that operate behind firewalls. Note that this option will force the client into passive mode, with all data channel connections being outbound from the local system to the remote server.
  • Added the functions FtpGetEncoding and FtpSetEncoding to control how filenames are encoded when sent to the server. By default, the library will use the default ANSI encoding for filenames, however if the server supports UTF8 encoding for internationalized filenames, the client can enable this by setting the encoding type to FTP_ENCODING_UTF8. Note that the server must fully support UTF-8 encoding for filenames, and some servers may advertise support for UTF-8 encoded filenames even though the underlying filesystem does not support them, which can result in unexpected behavior by the client application.
  • Corrected a problem with the HTTP API where automatic redirection wasn't working correctly with virtual hosts because the wrong hostname was being specified in the request header after the redirected connection was established. This problem would manifest as the library returning an error after making three connection attempts to the server using the redirected URL.
  • Updated the ImapIdle function to work using a separate thread to monitor status changes reported by the server. The idle status monitoring supports two modes, blocking and non-blocking where an application can be notified of changes to the mailbox using a callback mechanism. Note that the function signature for the IMAPIDLEPROC callback function has been changed to accommodate this functionality.
  • Added a function called ImapGetIdleThreadId which will return the ID of the thread that is currently monitoring the server for status changes to the selected mailbox. This function can also be used to determine if the client is currently in idle mode because a return value of zero indicates that there is no monitoring thread active.
  • Changed the PopGetHeaderValue, PopGetMessageId and PopGetMessageSender functions so that they no longer depend exclusively on POP3 protocol command extensions such as XTND XLST and SENDER. If the server does not support these extensions, the library will default to retrieving and parsing the complete message header block for the specified message, enabling these functions to be used with all servers.
  • Corrected a reference counting problem where the memory allocated for the last message that has been retrieved using the POP3 API would not always be freed when multiple connections were established by the same process, and then one of those connections were closed.
  • Corrected a problem with the POP3 library where an error would be returned indicating that a feature was not available, when the actual problem was that the message number specified by the application was incorrect (i.e.: the message does not exist on the server or the message has been deleted). This error message would cause confusion when an application would use the PopGetErrorString value to display an error to the end-user. For example, if the application attempted to retrieve a message using an invalid message number, the user would see an error message stating that retrieving the message was not a supported feature. The error message now correctly reflects that the problem is the message number is invalid.
  • Corrected a problem with the MIME library where a message may not decode correctly if it contained an attachment with a file name that was longer than 127 characters. The library would not see that message part as containing a file attachment, which would prevent it from being extracted from the message and stored in a file.
  • Corrected a problem where the MIME library may not detect that a message contains file attachments, even though the multipart header values are correct for the section of the message that contains the attachment. This problem was related to an issue where attachments with long file names could not be extracted, however this problem could also manifest with shorter file names that were encoded.
  • Changed the SMTP API to perform more stringent checking of the local hostname that is specified when calling the SmtpConnect function. If the hostname is not a valid, fully qualified domain name the API will attempt to use the domain name configured for the local system, or will default to simply using the local system's IP address. This change addresses an issue where an invalid local domain name could cause SMTP servers to reject an otherwise valid submission by the client application.
  • Corrected a problem with the ICMP API where attempting to send ICMP ECHO datagrams to a remote host could result in "access denied" errors under Windows Vista and Windows 7 unless the process was running with administrative privileges.
  • Corrected a problem with the ICMP API where ECHO datagrams could be sent successfully, however the API would intermittently report errors indicating that the message sequence IDs mismatched. This problem most commonly manifested itself when the ICMP error messages would be returned to the caller by an intermediate router indicating that the host was unreachable.
  • Corrected a problem where incorrect error messages could be returned by the ICMP API, particularly when there were multiple ICMP ECHO datagrams being sent by the same application using IcmpEcho or IcmpTraceRoute in different threads, and some of those requests timed out. Subsequent failures could return error codes associated with previously failed transactions rather than indicating the problem with the current operation.
  • Added the function NntpGetArticleByMessageId to simplify the process of retrieving a newsgroup article based on its message ID rather than the article number. The GetArticle method in the NntpClient class has been overloaded to support retrieving articles by both article number and message ID.
  • Changed how asynchronous socket I/O notifications are handled by the SocketWrench API to address situations in which the application suspends processing messages for a period of time or with applications running on a system under high load. This change should improve situations in which network event notifications appear to stall or stop firing after a period of time until the application performs a network I/O function such as reading data from the socket.
  • Corrected a problem where the status of a server's credentials was not being updated correctly when a secure connection was established using any of the secure network APIs. This could cause the library to report that the certificate should not be trusted, even though it was valid.
  • Modified how the SECURITYCREDENTIALS structure is processed when a secure connection is established. If the certificate store member of the structure specifies a valid file name, it will automatically load the certificate from that file rather than the registry. The certificate file must be in PKCS12 (PFX) format and it must contain the private key that is associated with the certificate. In addition, if the certificate store member specifies as string that begins with "HKCU:" then the specified certificate will be loaded from the current user's certificate store; if the string begins with "HKLM:" then the specified certificate will be loaded from the local machine store instead.
  • Changed the library that performs the debug logging to perform a more stringent version compatibility check. If developers are using the trace logging functions in their applications (e.g.: FtpEnableTrace), they should always make sure that the matching version of the debugging library cstrace6.dll be included alongside their application executable. This corrects a problem where mismatched versions of the libraries could cause the application to crash. If the versions do not match, the library will silently disable the trace logging features.

SocketTools 6.0 Build 6010

.NET Assemblies
  • Corrected a problem with the DnsClient class where nameserver queries may fail unexpectedly if the server is slow to respond, even though the timeout and retry periods have not been reached.
  • Corrected a problem with the MailMessage class where a general protection fault may occur when importing malformed messages with a certain message structure.
  • Corrected a problem where the SmtpClient class may not append the contents of a message correctly when submitting a message to the server for delivery.
  • Corrected a problem with the FtpClient class where a directory listing would not return the first valid filename when using SFTP. This issue did not affect standard FTP and FTPS connections.
  • Improved the FtpClient class to support a wider variety of SFTP servers that used non-standard directory listing formats. This change particularly improves reliability on non-UNIX based SFTP servers.
  • Corrected a problem that could prevent clients from establishing a connection to SSH and SFTP servers when certain authentication options were not supported by the server.
  • Corrected a problem with the FtpClient class where a local file handle would not be released if a file transfer could not be completed due to an error on the server. This would lock the local file until the application terminated and would result in a handle leak.
  • Improved the error codes returned by the FtpClient class to be more specific about the cause of failure when transferring files using SFTP, rather than returning a generic error about the file being not found.
  • Corrected a problem with the HttpClient class where encoded data may not be submitted correctly unless the content type was explicitly specified. This issue typically affected XML data being submitted to the server.
  • Corrected a problem with the HttpClient class where textual data may not be returned in standard text format for Windows when the server is running on a UNIX platform. Under some circumstances the option to convert end-of-line control character sequences was ignored, and the text would be returned in the standard UNIX format.
  • Corrected a problem with the TelnetClient class where option negotiation may fail unexpectedly with certain servers that do not strictly adhere to the protocol specification. This problem would result in a failed connection, and would typically affect servers running on non-UNIX platforms.
  • Corrected a problem in the SocketWrench class where events would not fire correctly if the socket was changed from blocking (synchronous) to non-blocking (asynchronous) after a connection had been established.
  • Corrected a problem with the InternetServer class where OnTimeout events were not being generated for client sessions that were idle longer than the specified timeout period.
  • Corrected a problem with the InternetServer class where the ClientCount property and ClientHandles field were not updating properly when client connections were established or disconnected.
  • Improved the InternetServer class to be more responsive under higher load conditions, and resilient to potential denial-of-service attacks where hostile clients may attempt to flood the server with connection requests.
ActiveX Controls
  • Corrected a problem with the DnsClient control where nameserver queries may fail unexpectedly if the server is slow to respond, even though the timeout and retry periods have not been reached.
  • Corrected a problem with the MailMessage control where a general protection fault may occur when importing malformed messages with a certain message structure.
  • Corrected a problem where the SmtpClient control may not append the contents of a message correctly when submitting a message to the server for delivery.
  • Corrected a problem with the FtpClient control where a directory listing would not return the first valid filename when using SFTP. This issue did not affect standard FTP and FTPS connections.
  • Improved the FtpClient control to support a wider variety of SFTP servers that used non-standard directory listing formats. This change particularly improves reliability on non-UNIX based SFTP servers.
  • Corrected a problem that could prevent clients from establishing a connection to SSH and SFTP servers when certain authentication options were not supported by the server.
  • Corrected a problem with the FtpClient control where a local file handle would not be released if a file transfer could not be completed due to an error on the server. This would lock the local file until the application terminated and would result in a handle leak.
  • Improved the error codes returned by the FtpClient control to be more specific about the cause of failure when transferring files using SFTP, rather than returning a generic error about the file being not found.
  • Corrected a problem with the HttpClient control where encoded data may not be submitted correctly unless the content type was explicitly specified. This issue typically affected XML data being submitted to the server.
  • Corrected a problem with the HttpClient control where textual data may not be returned in standard text format for Windows when the server is running on a UNIX platform. Under some circumstances the option to convert end-of-line control character sequences was ignored, and the text would be returned in the standard UNIX format.
  • Corrected a problem with the TelnetClient control where option negotiation may fail unexpectedly with certain servers that do not strictly adhere to the protocol specification. This problem would result in a failed connection, and would typically affect servers running on non-UNIX platforms.
  • Corrected a problem in the SocketWrench control where events would not fire correctly if the socket was changed from blocking (synchronous) to non-blocking (asynchronous) after a connection had been established.
  • Corrected a problem with the InternetServer control where OnTimeout events were not being generated for client sessions that were idle longer than the specified timeout period.
  • Corrected a problem with the InternetServer control where the ClientCount property and ClientHandles property array were not updating properly when client connections were established or disconnected.
  • Improved the InternetServer control to be more responsive under higher load conditions, and resilient to potential denial-of-service attacks where hostile clients may attempt to flood the server with connection requests.
Dynamic Link Libraries
  • Corrected a problem with the DNS API where nameserver queries using DnsGetHostAddress or DnsGetRecord may fail unexpectedly if the server is slow to respond, even though the timeout and retry periods have not been reached.
  • Corrected a problem with the MimeImportMessageEx function where a general protection fault may occur when importing malformed messages with a certain message structure.
  • Corrected a problem where the SmtpAppendMessage function may not append the contents of a message correctly when submitting a message to the server for delivery.
  • Corrected a problem with the FtpGetFirstFile function where a directory listing would not return the first valid filename when using SFTP. This issue did not affect standard FTP and FTPS connections.
  • Improved the FTP API to support a wider variety of SFTP servers that used non-standard directory listing formats. This change particularly improves reliability on non-UNIX based SFTP servers.
  • Corrected a problem in the SSH and FTP APIs that could prevent clients from establishing a connection to SSH and SFTP servers when certain authentication options were not supported by the server.
  • Corrected a problem with the FtpGetFile and FtpPutFile functions where a local file handle would not be released if a file transfer could not be completed due to an error on the server. This would lock the local file until the application terminated and would result in a handle leak.
  • Improved the error codes returned by the FTP API to be more specific about the cause of failure when transferring files using SFTP, rather than returning a generic error about the file being not found.
  • Corrected a problem with the HttpPostData and HttpPostXml functions where encoded data may not be submitted correctly unless the content type was explicitly specified. This issue typically affected XML data being submitted to the server.
  • Corrected a problem with the HttpGetData function where textual data may not be returned in standard text format for Windows when the server is running on a UNIX platform. Under some circumstances the option to convert end-of-line control character sequences was ignored, and the text would be returned in the standard UNIX format.
  • Corrected a problem with the TelnetConnect and TelnetAsyncConnect functions where option negotiation may fail unexpectedly with certain servers that do not strictly adhere to the protocol specification. This problem would result in a failed connection, and would typically affect servers running on non-UNIX platforms.
  • Corrected a problem with the SocketWrench server API where INET_EVENT_TIMEOUT events were not being generated for client sessions that were idle longer than the specified timeout period.
  • Improved the SocketWrench server API to be more responsive under higher load conditions, and resilient to potential denial-of-service attacks where hostile clients may attempt to flood the server with connection requests.

SocketTools 6.0 Build 6000

  • New Secure Shell (SSH) protocol .NET class, ActiveX control and library which supports secure interactive terminal sessions and remote command execution. For more information, refer to the documentation on the Secure Shell protocol.
  • Supports the SFTP (FTP+SSH) protocol integrated into the .NET class, ActiveX control and library. In most cases, the developer needs only to specify the SSH port number when establishing the connection. This makes it very easy to integrate SFTP into existing applications that use the FTP component.
  • New Internet Server .NET class and ActiveX control which enables developers to easily create multi-threaded, event-driven server applications. For more information, refer to the documentation for the InternetServer component. The SocketWrench API has also been extended to provide a collection server API functions as part of the library.
  • Updated for full compatibility with the Windows Server 2008 and Windows Vista SP1 platforms, supporting the new security model and TCP/IP stack. It is recommended that applications which target these platforms upgrade to the current version.
  • Updated assemblies that specifically target Visual Studio 2008 and the .NET 3.5 Framework. Visual Studio 2005 and the .NET 2.0 Framework, as well as Visual Studio .NET 2003 and the .NET 1.1 Framework continue to be supported.
  • Added support for message storage to the MailMessage .NET class, ActiveX control and library. This enables the developer to easily store, retrieve and search multiple e-mail messages in a single data file.
  • Improved support for FTP servers that do not strictly conform to the protocol standard and increased overall compatibility with more servers, including many popular open-source FTP servers.
  • Added automatic file type detection for FTP transfers.  The component will automatically set the correct file transfer mode based on the type of file being uploaded or downloaded. The developer can also register their own custom file types.
  • Added automatic file verification for FTP transfers. The component can automatically verify that the file on the local system is identical to the file on the server using an MD5 hash or CRC-32 checksum. The file verification process can also be performed directly by the application.
  • Added support for virtual hosting on FTP servers. This enables the component to be used on servers that are configured to support multiple domains using the same external IP address.
  • Added support for returning file quota information from an FTP server, if the server supports individual users quotas. This is used to determine the number of files the user may create, and the total amount of data that they may upload to the server.
  • The FTP .NET class, ActiveX control and library is now more tolerant of certain non-standard responses returned by mail server, rather than requiring result codes that exactly match the values specified in the protocol standard.
  • Improved support in the HTTP .NET class, ActiveX control and library for posting XML data to a server, including the ability to post XML data and retrieve the response from the server in a single function or method call.
  • Improved support for firewalls and proxy servers, and improved the auto-detection code used to automatically configure proxy settings.
  • Improved overall performance of file uploads and downloads using FTP and HTTP, increasing the overall throughput for applications that must transfer large files.
  • Improved the MIME parsing engine so that it will automatically attempt to correct problems with malformed messages, or messages which do not strictly conform to the RFC 822 and/or RFC 2045 standard message formats.
  • Improved the POP3 and IMAP4 ActiveX controls, libraries and .NET classes making them more efficient when processing very large mailboxes on the server.
  • Core networking code updated to use Windows Sockets 2.2 API and removed all previous dependencies on the Windows Sockets 1.1 and deprecated TCP/IP stack in unsupported versions of Windows. SocketTools is only supported on Windows 2000 and later platforms.
  • Redesigned the memory management code used to allocate buffers and private data structures for client sessions, improving performance and reducing overhead when multiple sessions are created in a multithreaded application.
  • Added support for multiple threading models on a per-session basis in the .NET classes, enabling applications to create "free threaded" client sessions that may be accessed by any thread at any time. The ThreadModel property was added to all networking classes to enable the application to specify the threading model which should be used.
  • Added support for AES (Advanced Encryption Standard) encryption for secure SSL/TLS connections on Windows Server 2008 and Windows Vista.
  • Updated the Developers Guide and Technical Reference and made improvements and corrections to the overall documentation.