Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Tcl) Socket Connect Failure CasesDemonstrates a few common situations that would cause a TCP connect to a remote host:port to fail, an examines the LastErrorText for each case. This example discusses the following cases:
load ./chilkat.dll # This example requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. set socket [new_CkSocket] set tls 0 set maxWaitMillisec 5000 # First test the case where the remote host is not listening on the desired port. # In this case, my LAN has a computer at 192.168.1.137, but nothing on that computer # is listening for inbound connection to port 6660. set success [CkSocket_Connect $socket "192.168.1.137" 6660 $tls $maxWaitMillisec] puts [CkSocket_lastErrorText $socket] # The call to Connect should fail quickly, and the LastErrorText will contain # a message about the connection being rejected: # # socket2Connect: # connect2: # ConnectFailReason: Connection rejected # --connect2 # --socket2Connect # Now test the case where there is no computer on the network at the desired IP address. # For example, on my LAN, there is no computer at 192.168.1.188. If ping is used to test, # the error message would be "Destination host unreachable". set success [CkSocket_Connect $socket "192.168.1.188" 80 $tls $maxWaitMillisec] puts [CkSocket_lastErrorText $socket] # In this case, the connection is "rejected" as before, but the connect hangs for the entire # maximum waiting period (maxWaitMillisec), which is 5 seconds in this case. # (If the maxWaitMillisec is a large enough amount of time, the operating system # may fail the connect with a "connection rejected" after a long wait. # The difference is that when the remote host exists and is reachable, the failure is quick.) # The portion of the LastErrorText for this failure is shown here: # connectInner: # hostname: 192.168.1.188 # port: 80 # tls: 0 # maxWaitMs: 5000 # socket2Connect: # connect2: # connectSocket: # connect_ipv6_or_ipv4: # timeout waiting for connect to complete # numSec: 5 # numMicroSec: 0 # failedWaitToConnect: Socket operation timeout. # --connect_ipv6_or_ipv4 # --connectSocket # ConnectFailReason: Timeout # --connect2 # --socket2Connect # Failed. # --connectInner # Imagine that a new rule is added to Windows Firewall to block all connections # for this example app. The characteristics of the failure are the same as for # the case where nothing on the remote computer is listening at the given port. # The connection attempt fails immediately, and the error message (from the OS) is # "connection rejected". Also notice that SSL/TLS never enters the equation because # the SSL/TLS handshake begins *after* the TCP connection is completed. When the # TCP connection fails, it never reaches the point of even beginning the SSL/TLS negotiation. set tls 1 set success [CkSocket_Connect $socket "192.168.1.188" 80 $tls $maxWaitMillisec] puts [CkSocket_lastErrorText $socket] # connectInner: # hostname: smtp.gmail.com # port: 465 # tls: 1 # maxWaitMs: 5000 # socket2Connect: # connect2: # ConnectFailReason: Connection rejected # --connect2 # --socket2Connect # Failed. # --connectInner # What about the case where the ISP blocks an outbound connection? My home ISP is # Comcast cable, and they block outbound SMTP port 25. set tls 0 set success [CkSocket_Connect $socket "pop3.btconnect.com" 25 $tls $maxWaitMillisec] puts [CkSocket_lastErrorText $socket] # The result is a timeout: # connectInner: # hostname: pop3.btconnect.com # port: 25 # tls: 0 # maxWaitMs: 5000 # socket2Connect: # connect2: # connectSocket: # connect_ipv6_or_ipv4: # timeout waiting for connect to complete # numSec: 5 # numMicroSec: 0 # failedWaitToConnect: Socket operation timeout. # --connect_ipv6_or_ipv4 # --connectSocket # ConnectFailReason: Timeout # --connect2 # --socket2Connect # Failed. # --connectInner # What about the case where the Windows Firewall at the remote host is blocking the # inbound connection. On Chilkat's internal LAN, there is a computer at 192.168.1.127 # running an SSH server. After adding an inbound rule to block port 22, external connections # fail with a timeout, as shown below: set success [CkSocket_Connect $socket "192.168.1.127" 22 $tls $maxWaitMillisec] puts [CkSocket_lastErrorText $socket] # connectInner: # hostname: 192.168.1.127 # port: 22 # tls: 0 # maxWaitMs: 5000 # socket2Connect: # connect2: # connectSocket: # connect_ipv6_or_ipv4: # timeout waiting for connect to complete # numSec: 5 # numMicroSec: 0 # failedWaitToConnect: Socket operation timeout. # --connect_ipv6_or_ipv4 # --connectSocket # ConnectFailReason: Timeout # --connect2 # --socket2Connect # Failed. # --connectInner # Finally, what if we try to connect to a hostname that does not resolve to an IP address? set success [CkSocket_Connect $socket "www.thisdoesnotresolvetoanyipaddressxyz.com" 22 $tls $maxWaitMillisec] puts [CkSocket_lastErrorText $socket] # In this case there is an immediate failure: # connectInner: # hostname: www.thisdoesnotresolvetoanyipaddressxyz.com # port: 22 # tls: 0 # maxWaitMs: 5000 # socket2Connect: # connect2: # connectSocket: # connect_ipv6_or_ipv4: # resolveHostname6: # getAddressInfo: # Failed to get host address info. (3) # SocketError: WSAHOST_NOT_FOUND No such host is known. # hostOrIpAddr: www.thisdoesnotresolvetoanyipaddressxyz.com # port: 22 # Versions of Windows earlier than Windows XP are limited to handling IPv4 only # On Windows Server 2003 and Windows XP, IPv6 addresses are returned only if IPv6 is installed on the local computer. # --getAddressInfo # --resolveHostname6 # Domain to IP address resolution failed. # --connect_ipv6_or_ipv4 # --connectSocket # ConnectFailReason: DNS lookup failed # --connect2 # --socket2Connect # Failed. # --connectInne delete_CkSocket $socket |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.