Classic ASP
Classic ASP
Socket Connect Failure Cases
See more Socket/SSL/TLS Examples
Demonstrates 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:
- The remote host is not listening on the desired port.
- No remote host exists at the IP address (such as on a LAN).
- The local Windows Firewall blocks the outbound connection.
- Your ISP blocks the outbound connection.
- The remote Windows Firewall blocks the inbound connection.
- The domain cannot be resolved to an IP address.
Chilkat Classic ASP Downloads
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<%
success = 0
' This example requires the Chilkat API to have been previously unlocked.
' See Global Unlock Sample for sample code.
set socket = Server.CreateObject("Chilkat.Socket")
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)
Response.Write "<pre>" & Server.HTMLEncode( socket.LastErrorText) & "</pre>"
' 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)
Response.Write "<pre>" & Server.HTMLEncode( socket.LastErrorText) & "</pre>"
' 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)
Response.Write "<pre>" & Server.HTMLEncode( socket.LastErrorText) & "</pre>"
' 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)
Response.Write "<pre>" & Server.HTMLEncode( socket.LastErrorText) & "</pre>"
' 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)
Response.Write "<pre>" & Server.HTMLEncode( socket.LastErrorText) & "</pre>"
' 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)
Response.Write "<pre>" & Server.HTMLEncode( socket.LastErrorText) & "</pre>"
' 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
%>
</body>
</html>