Why Can't I Connect? is an open source tool which helps you identify and solve TCP/IP connection errors. It has direct support for connecting to a range of common server types (Microsoft SQL Server, MySQL Server, FTP, SFTP, IMAP, POP3, SMTP, IRC, LDAP, Usenet), as well as providing generic client and server options.
If you can't receive email from a POP3 server, say, you would choose the POP3 option, enter your server name or IP address, and optionally select a protocol (STARTLS, SSL/ TLS) or enter a port. (You don't have to enter a user name or password at any point, and so there's no need to worry about security: Why Can't I Connect? tries to reach the server only, it doesn't handle authentication.)
Once you're set up, click OK and Why Can't I Connect? attempts to make the connection, reporting on what happens every step of the way. This includes identifying the current host name, checking for a bindable IP address, binding it to a socket handle, setting the receive and send timeouts, locating an IP address for the server and trying to make the connection.
If any of this fails then an error message appears with possible explanations: "your network connection is down", your DNS server is down", "the port is being blocked by a firewall", "the server is slow", and so on.
This final analysis won't usually give you a definitive answer. When we tried running a POP3 connection to a web server, for instance, we got a "permission denied" error, with suggestions including "your network connection is down", "the port is not listening/ active", "the port is being blocked by a firewall", "the maximum connections for the server has been exceeded". The second was correct - there was nothing listening at port 110 - but Why Can't I Connect? has no way to know that for sure, and you'll need to do more work to turn its report into a solution.
The program can help point you in the right direction, though, and it has some welcome bonus features thrown in. Bridging (tracing the conversation between an existing client and server) is our favourite, but there are also tools to report on connecting/ listening/ reserved ports, and a scripting option can automate testing to track down intermittent errors.