This is a Canonical Question about Connection Refused

We see a lot of questions to the effect

When I try to connect to a system I get a message

Connection refused

Why is this ?

  • 2
    We get this a lot in Apache Hadoop, where it is often caused by configuration errors in the client: which host to talk to, what their DNS or /etc/host tables are set up to, or a mismatch between the ports used by a service and that the clients thinks it should use. Accordingly, we have a dedicated wiki entry on the topic. Many of the problems are likely elsewhere, albeit (hopefuily) on a smaller scale. Debugging connection problems in a 1000 node cluster is not fun. – Steve Loughran Jan 3 '17 at 12:28
  • Your dedicated wiki entry link points to this question ;) – Iain Jan 3 '17 at 12:46
  • 1
    good catch. Here is the official link: wiki.apache.org/hadoop/ConnectionRefused. I'll add a cross reference back from there to here for that full loop though. – Steve Loughran Jan 6 '17 at 14:19
  • @SteveLoughran Cool article - one comment - the link back says Stack Overflow and we're Server Fault ;) – Iain Jan 6 '17 at 14:27
  • done. FWIW, that wiki link is added to ConnectionRefused exceptions passed up in the Hadoop stack, along with the extra info (hosts, ports) needed to work out what is going wrong. We still get lots of bug reports from people who see the stack trace and don't follow the link to the wiki – Steve Loughran Jan 6 '17 at 14:39
up vote 89 down vote accepted

Note: This message is a symptom of the problem you are trying to solve. Understanding the cause of the message will ultimately lead you to solving your problem.

The message 'Connection Refused' has two main causes:

  1. Nothing is listening on the IP:Port you are trying to connect to.
  2. The port is blocked by a firewall.

No process is listening.

This is by far the most common reason for the message. First ensure that you are trying to connect to the correct system. If you are then to determine if this is the problem, on the remote system run netstat or ss1 e.g. if you are expecting a process to be listening on port 22222

sudo netstat -tnlp | grep :22222

or

ss -tnlp | grep :22222

For OSX a suitable command is

sudo netstat -tnlp tcp | grep '\.80 '

If nothing is listening then the above will produce no output. If you see some output then confirm that it's what you expect then see the firewall section below.

If you don't have access to the remote system and want to confirm the problem before reporting it to the relevant administrators you can use tcpdump (wireshark or similar).

When a connection is attempted to an IP:port where nothing is listening, the response from the remote system to the initial SYN packet is a packet with the flags RST,ACK set. This closes the connection and causes the Connection Refused message e.g.

$ sudo tcpdump -n host 192.0.2.1 and port 22222
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp14s0, link-type EN10MB (Ethernet), capture size 262144 bytes

12:31:27.013976 IP 192.0.2.2.34390 > 192.0.2.1.22222: Flags [S], seq 1207858804, win 29200, options [mss 1460,sackOK,TS val 15306344 ecr 0,nop,wscale 7], length 0

12:31:27.020162 IP 192.0.2.1.22222 > 192.0.2.2.34390: Flags [R.], seq 0, ack 1207858805, win 0, length 0

Note that tcpdump uses a . to represent the ACK flag.

Port is blocked by a firewall

If the port is blocked by a firewall and the firewall has been configured to respond with icmp-port-unreachable this will also cause a connection refused message. Again you can see this with tcpdump (or similar)

$ sudo tcpdump -n icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on enp14s0, link-type EN10MB (Ethernet), capture size 262144 bytes 13:03:24.149897 IP 192.0.2.1 > 192.0.2.2: ICMP 192.0.2.1 tcp port 22222 unreachable, length 68

Note that this also tells us where the blocking firewall is.


So now you know what's causing the Connection refused message you should take appropriate action e.g. contact the firewall administrator or investigate the reason for the process not listening.

1 Other tools are likely available.

  • 1
    ELI5 version: it means the connection request got to the other computer, and the other computer had no clue what you were talking about. – immibis Sep 29 '15 at 1:56
  • "No process is listening." The major reason ..! – Samitha Chathuranga Dec 11 '17 at 13:11
  • In my case, something was listening… but on a different node that the one I was attempting to connect to. Oops. – ijoseph Sep 7 at 21:05
  • 1
    @ijoseph So nothing was listening then. – Iain Sep 30 at 12:21
  • @Iain if a tree doesn't fall in the forest and the forest is completely quiet, are the other trees listening? – ijoseph Sep 30 at 23:44

For me on Debian 6 squeeze it was as simple as checking the SSH service:

sudo service ssh status

And finding nothing existed (with the message ssh: unrecognized service) just installing the service:

sudo apt-get install openssh-server

This also works if you're not getting an SFTP connection, as SFTP is a subset of SSH (whereas FTPS is a subset of FTP).

My Centos Shorewall firewall had run out of disk space. confusingly, some sites, like youtube and MS worked. Others like cnn.com failed. Clearing some space and restarting the server fixed the issue for me.

protected by Michael Hampton Nov 3 '16 at 15:06

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.