2009-05-11 8 views
2

Qu'est-ce qui provoquerait un socket TCP à lancer "java.net.BindException: adresse déjà utilisée" même lorsque l'adresse de réutilisation est définie sur true? Cela se produit uniquement si l'application est rapidement redémarrée. En cours d'exécution sur CentOS 5 linux OS.Java Bind Exception

+3

Êtes-vous sûr de fermer correctement le socket TCP ? Comment redémarrez-vous l'application? – AlbertoPL

+0

Il s'agit d'un redémarrage brutal de l'application terminée par une autre application «moniteur logiciel». (Supposons juste que c'est un pkill). – Michael

+0

J'ai vu la même chose avec .NET sous Windows, si un processus serveur était "tué" au lieu de s'arrêter normalement. –

Répondre

2

Si ce que vous dites est correct, vous devriez pouvoir intercepter cette exception dans une boucle et réessayer après quelques secondes. (Vous ne devriez pas avoir à faire cela, mais j'ai entendu parler de quelques choses bizarres sur CentOS)

1

Java Exception de liaison se produit Si votre port ou InetAddress est déjà utilisé et que vous souhaitez utiliser à nouveau. Alors libérez le port d'arrêter le programme en cours d'exécution. autrement changer le port

Merci Deepak

3

Ceci explique kinda:

http://www.beej.us/guide/bgnet/output/html/singlepage/bgnet.html#bind

Parfois, vous remarquerez peut-être, vous essayez exécuter à nouveau un serveur et bind() échoue , affirmant "Adresse déjà utilisée". Qu'est-ce que cela signifie? Eh bien, un peu de un socket qui a été connecté est qui traîne encore dans le noyau, et il monopolise le port. Vous pouvez soit attendre à effacer (une minute environ), ou ajouter du code à votre programme permettant de réutiliser le port, comme cette

(fournit le code C)

Fondamentalement, en C, vous appelez une fonction appelée setsockopt(), et l'un des paramètres s'appelle SO_REUSEADDR, ce qui vous permet de réutiliser ce port.

J'ai trouvé quelques liens bref sur Google qui devrait vous aider à démarrer déterminer comment définir l'option équivalente en Java:

http://java.sun.com/j2se/1.4.2/docs/guide/net/socketOpt.html

http://java.sun.com/j2se/1.4.2/docs/api/java/net/SocketOptions.html

+0

vos liens ne fonctionnent plus! – Jesus