2011-01-10 7 views

Antwort

5

Nein! Erstellen eine Buchse über new Socket (String, int) zu einer Lösung wie diese

addr = InetAddress.getByName(hostname); 

, die eine Abkürzung für

return InetAddress.getAllByName(host)[0]; 

Die Adressauflösung in dem Sockel c-tor durchgeführt wird.

Wenn Sie die Verbindung wiederherstellen müssen (Failover), verwenden Sie das Ergebnis von InetAddress.getAllByName (Host), randomize (oder verwenden Sie Round-Robin) und stellen Sie eine Verbindung zu den erforderlichen Adressen her.

Edit: auch wenn Sie mit einigen wahrscheinlichen Fehler verbinden müssen, wäre es besser, mit der Methode connect der Socket-Klasse mit einem Timeout. Auch stellen Sie sicher, dass Sie sogar ausgefallene Sockets (und insbesondere Kanäle) schließen, da sie eine FD on * Nix auslecken können.

+0

OK, es ist an der Zeit, dass ich gefragt habe. Was ist * Nix? –

+0

Er steht für "unix alike", das Schließen von Sockets unter Linux/Unix ist zweiphasig und aufgrund einiger Unzulänglichkeiten kann die 2. Phase nicht abgeschlossen werden und ein berüchtigtes FD-Leck hinterlassen, es sei denn, es erfolgt ein ordnungsgemäßer Aufruf von close(). Stellen Sie also sicher, dass Sie alle SocketChannel (Sockets) schließen, unabhängig davon, ob connect() erfolgreich ist – bestsss

Verwandte Themen