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?? :(
probabilmente hai qualche thread aperto, se usi eclipse usa la visualizzazione debug che ti fa vedere tutti i threads in esecuzione.
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)
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... :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.