uncaught exception address already in use bind(2)

uncaught exception address already in use bind(2)

You might came across uncaught exception address already in use bind(2) error while trying to start TCP Server for starting your Rails Application. We will see why Address already in use error is thrown by programs while execution. This is most common error that you will come across while developing Rails Application and solution for this is very simple.

Root Cause

Basically the error is self explanatory. It means that server is already started and you are trying to start it again or the some other application is already running on the specific port on TCP server. Thus your program is not able to gain access to that specific port on TCP server.

Finding Process which Process is running

We can find which process is using the address which Rails app tries to run on by using following command:

lsof -i tcp:3000

The above command basically finds process which is using TCP server and 3000 as port address.

The result of above process will be something like:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 4662 username 12u IPv4 0x7bc22ecf743faec3 0t0 TCP *:hbci

Then you will have to kill the process that is using the TCP server with specified source in given command.

Eliminating(Killing) the Process

The process can be killed by using following command:

kill -9 process_id

e.g.

kill -9 4662

The option -9 is passed to killing the process forcefully.

Re-Running Your Program

Now, you can try running your Rails/Other application and it will start without throwing error: Uncaught exception: Address already in use - bind(2).