PDA

View Full Version : [JAVA]Address already in use


AbuJaffa
24-05-2006, 17:45
Scusate...ho un'applicazione client-server e alcune volte mi capita che eseguendo il server esca fuori un errore del genere:Address already in use: JVM_Bind
Ora so bene che probabilmente non ho effettuato bene la chiusura del server ed è abbastanza fastidioso poichè sono costretto o a riavviare l'IDE oppure a cambiare porta d'ascolto. :mad: Non c'è un altro metodo che mi permetta di risolvere questa situazione? Grazie mille... :)

AbuJaffa
24-05-2006, 20:47
nessuno?? :(

SteR9
24-05-2006, 21:55
probabilmente hai qualche thread aperto, se usi eclipse usa la visualizzazione debug che ti fa vedere tutti i threads in esecuzione.

Andlea
24-05-2006, 22:55
Guarda nella documentazione, ora non ricordo bene, ma in C aprendo una socket è possibile specificare il reuse_addr, per riutilizzare l'indirizzo e la porta in questi casi(ad esempio quando un server crasha)

il_luridone
24-05-2006, 23:39
Andlea ha visto giusto, devi specificare l'opzione SO_REUSEADDR a livello socket, altrimenti il kernel ci mette un po' a rilasciare il socket, anche se è stato chiuso.

http://java.sun.com/j2se/1.5.0/docs/api/java/net/Socket.html#setReuseAddress(boolean)

SteR9
25-05-2006, 08:52
quando il socket viene chiuso si chiude subito, non ci vuole tanto tempo. Se da quell'errore lo da perchè c'è qualche errore nel codice. ;)

il_luridone
25-05-2006, 09:22
quando il socket viene chiuso si chiude subito, non ci vuole tanto tempo. Se da quell'errore lo da perchè c'è qualche errore nel codice. ;)
Può essere che sia così se l'errore salta fuori durante l'esecuzione del codice.

Se invece la prima volta il server viene eseguito bene, poi termina e all'esecuzione successiva dà subito quell'errore, allora molto probabilmente è una questione di SO_REUSEADDRESS.

Occhio: il socket viene chiuso subito implicitamente quando il processo termina, ma questo non vuol dire che il kernel renda disponibile immediatamente la coppia indirizzo-porta a cui il socket era bindato. L'errore "Address already in use" salta fuori sia quando fai una bind su un socket già in uso, sia quando il socket è chiuso ma non ancora reso nuovamente disponibile.

AbuJaffa
25-05-2006, 11:54
Può essere che sia così se l'errore salta fuori durante l'esecuzione del codice.

Se invece la prima volta il server viene eseguito bene, poi termina e all'esecuzione successiva dà subito quell'errore, allora molto probabilmente è una questione di SO_REUSEADDRESS.

Occhio: il socket viene chiuso subito implicitamente quando il processo termina, ma questo non vuol dire che il kernel renda disponibile immediatamente la coppia indirizzo-porta a cui il socket era bindato. L'errore "Address already in use" salta fuori sia quando fai una bind su un socket già in uso, sia quando il socket è chiuso ma non ancora reso nuovamente disponibile.

Esattameto questa è la situazione. Provo e vi faccio sapere... :)