Address already in use

This error means an address is already in use, this is frequently due to a network port or socket being already claimed by another process. You can't have two processes listen on the same IP address/port pair at the same time unless they actively cooperate to do so. For example, when starting apache a second time without closing down the first connection you get in the logs:

 Address already in use: make_sock: could not bind to port 80

You can tell whats listening on a port by using:

 netstat -ap

(see netstat(8) for more information)

kill(1) the other program that is listening on that port and try again.

Usually you get this error when trying to start a daemon that is already running.

This also occurs when a TCP socket is still timing out. If you stop a program that was listening then restart it again quickly, you may find you get this error. In this case either wait a few minutes (4 should do); or in the case that it is your own program; use the code below.

To code around this call

  unsigned int opt = 1;
  if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))==-1) {
    perror("setsockopt(fd,SOL_SOCKET, SO_REUSEADDR,1)");

Another cause of this is that you have run out of spare addresses in the euphemeral port range. if you call bind(2) with a port of 0, then the kernel will choose a port out of the euphemeral port range. If there are no spare ports in this range you may get an "Address already in use" error. Under linux you can change which ports are available to be used as ephemeral ports with the net.ipv4.ip_local_port_range sysctl.