# Verbindungs reconnect Address already in use



## Empire Phoenix (10. Mai 2011)

Warum geht folgender code nicht? (Ist nur ein Beispiel so benutze ich das natürlich nicht)
Erster start Eine runde lauft erfolgreich dannach gibt es sofort ne:Exception in thread "main" java.net.BindException: Address already in use: connect
diese tritt interessanter weise bei der connect auf und nicht bei der bind.

Solange jetzt laut netstat -a diese verbindung noch auf TIME_WAIT steht lässt sich keine weitere Runde beenden.
Hat einer eine Ahnung woher dieses Verhalten kommt?


```
import java.net.InetSocketAddress;
import java.net.Socket;


public class TestSocketReuse {
	static private InetSocketAddress local = new InetSocketAddress("0.0.0.0", 21);
	static private InetSocketAddress remote = new InetSocketAddress("nh-game.net", 80);
	
	public static void main(String[] args) throws Exception{
		while(true){
			
			Socket socket = new Socket();
			socket.setReuseAddress(true); 
			socket.bind(local);
			socket.connect(remote);  //why does this line throws the bind exeption?
			socket.close();
			System.out.println("Round succesfull");
		}
	}

}
```


----------



## HoaX (10. Mai 2011)

Weil der Port verständlicher weise noch belegt ist. Man kann keine zwei Sockets auf den selben Port binden. Warum überhautp nochmal einen neuen Socket in der Schleife erstellen? Mach das einfach einmal vor der Schleife und gut is.


----------



## FArt (10. Mai 2011)

socket TIME_WAIT - Google-Suche


----------



## Empire Phoenix (10. Mai 2011)

nur die kurze frage, ihr habt schon das   socket.setReuseAddress(true);  gesehen oder? weil laut der javadok davon soll einem das genau das sofortige rebinden nach dem close ermöglichen......
.....

Und wie ich schon sagte geht es dabei nur um ein Beispiel, als simples Testcase. Die reale logic ist erheblich kompizierter.

Das Programm spingt in wirklicheit zwschen mehreren hundert servern hin und her, und wenn die situation auftritt, dass es auf dem server wo es gerade zuvor war zurückspringt passiert der fehler.


----------



## FArt (10. Mai 2011)

Poste doch mal den Stacktrace. Java Version? Betriebsystem?


----------



## Empire Phoenix (10. Mai 2011)

Win xp x86 und Win 7 x64


```
Exception in thread "main" java.net.BindException: Address already in use: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at TestSocketReuse.main(TestSocketReuse.java:15)
```


----------

