PDA

View Full Version : [C]liberare socket server


rschirin
16-03-2011, 19:38
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?

bobbytre
16-03-2011, 22:58
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.

rschirin
17-03-2011, 00:53
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.

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?

tuccio`
17-03-2011, 01:18
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

WarDuck
18-03-2011, 11:14
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.