Differences between current version and predecessor to the previous major change of EADDRINUSE.

Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History

Newer page: version 8 Last edited on Wednesday, September 6, 2006 3:03:26 pm by PerryLorier
Older page: version 6 Last edited on Monday, August 11, 2003 5:03:54 pm by PerryLorier Revert
@@ -1,11 +1,15 @@
 !!!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. 
@@ -14,9 +18,15 @@
 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)"); 
- ! exit(1); 
+ ~ exit(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 <tt>net.ipv4.ip_local_port_range</tt> sysctl.