|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2010
Messaggi: 162
|
[C]liberare socket server
mi sto esercitando un po' nella creazione di vari server e client tramite socket. ho però un problema: quando il server invoca la accept, si mette in attesa. in questo momento io non ho ancora un client con cui rispondere a quella accept, quindi se killo il processo e poi provo a far ripartire il server mi viene restituito un errore EADDRINUSE. come posso risolvere?
__________________
Acer 5920g: T7500 GeForce 8600GT 2GB DDR2 250HDD |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
crei un thread che resti in ascolto degli input dalla tastiera , quando ad es. premi Q , fai terminare il programma naturalmente liberando tutte le risorse allocate, in questo modo non dovresti piu avere quel problema.
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jan 2010
Messaggi: 162
|
scusami ma il thread dove lo dovrei creare?cioè....il server è in attesa sulla accept quindi non esegue altro. o sbaglio?per liberare le risorse allocate uso qualche chiamata precisa?
__________________
Acer 5920g: T7500 GeForce 8600GT 2GB DDR2 250HDD |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
se è per questo puoi usare signal handler (se sei su linux, come immagino visto che parli di kill, altrimenti console control handler su windows) e atexit per rilasciare le risorse, senza inventarti thread etc
sicuramente chiudendo il socket (close su linux, closesocket su win) non dovresti avere problemi.. però è strano che non lo chiuda da solo quando termini il processo |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12880
|
Non ricordo se questa cosa dipende dal fatto che Linux adotta una particolare policy di sicurezza oppure dipende dal fatto che TCP lascia comunque aperta una finestra di 30 secondi dopo la disconnessione per raccogliere eventuali pacchetti che arrivano in ritardo.
Nel primo caso credo si possa modificare questo comportamento, ma non ho mai approfondito la questione. Se provi dopo un po' di tempo dovrebbe nuovamente consentirti di bindare la stessa porta. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:45.




















