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
(Perl) 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:
use chilkat(); # This example requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. $socket = chilkat::CkSocket->new(); $tls = 0; $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. $success = $socket->Connect("192.168.1.137",6660,$tls,$maxWaitMillisec); print $socket->lastErrorText() . "\r\n"; # 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". $success = $socket->Connect("192.168.1.188",80,$tls,$maxWaitMillisec); print $socket->lastErrorText() . "\r\n"; # 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. $tls = 1; $success = $socket->Connect("192.168.1.188",80,$tls,$maxWaitMillisec); print $socket->lastErrorText() . "\r\n"; # 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. $tls = 0; $success = $socket->Connect("pop3.btconnect.com",25,$tls,$maxWaitMillisec); print $socket->lastErrorText() . "\r\n"; # 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: $success = $socket->Connect("192.168.1.127",22,$tls,$maxWaitMillisec); print $socket->lastErrorText() . "\r\n"; # 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? $success = $socket->Connect("www.thisdoesnotresolvetoanyipaddressxyz.com",22,$tls,$maxWaitMillisec); print $socket->lastErrorText() . "\r\n"; # 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 |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.