PDA

Visualizza la versione completa : liberare una porta


kylnas1
08-07-2005, 15:25
Salve a tutti, sto provando a fare una chat in c utilizzando le socket, solo che ho il problema che quando lancio il server, e mi metto in ascolto su una porta, se devo modificare il codice e provo a rifarlo partire ottengo l'errore che la porta è già occupata.
Ho provato un comando del genere: killall server ("server" è il nome dell'eseguibile del programma) ma senza risultato.
Qualche aiuto?

stai_tranquillo
08-07-2005, 15:32
killalo con -9

kill [pid] -9 così muore di sicuro.. al massimo ti resta zombie ma le risorse dovrebbe liberarle

maiosyet_2
08-07-2005, 17:06
Al posto che killarlo brutalmente usa una socket close(), così non hai problemi.

kylnas1
08-07-2005, 17:26
Originariamente inviato da stai_tranquillo
killalo con -9

kill [pid] -9 così muore di sicuro.. al massimo ti resta zombie ma le risorse dovrebbe liberarle
Il problema è che non so che pid ha. Se uso il comando "top" riesco a vedere solo alcuni processi, poi la finestra della shell termina e non riesco a scorrere la lista dei processi. Qualche altro comando?

kylnas1
08-07-2005, 17:26
Originariamente inviato da maiosyet_2
Al posto che killarlo brutalmente usa una socket close(), così non hai problemi.
Non so come fare, visto che il programma rimane in ascolto...dovrei trappare un "segnale"?

stai_tranquillo
08-07-2005, 17:28
Originariamente inviato da kylnas1
Il problema è che non so che pid ha. Se uso il comando "top" riesco a vedere solo alcuni processi, poi la finestra della shell termina e non riesco a scorrere la lista dei processi. Qualche altro comando?


pidof?

Ikitt
08-07-2005, 17:28
Originariamente inviato da kylnas1
Salve a tutti, sto provando a fare una chat in c utilizzando le socket, solo che ho il problema che quando lancio il server, e mi metto in ascolto su una porta, se devo modificare il codice e provo a rifarlo partire ottengo l'errore che la porta è già occupata.
Ho provato un comando del genere: killall server ("server" è il nome dell'eseguibile del programma) ma senza risultato.
Qualche aiuto?

Aggiungi questo subito dopo la socket():


/*reuse a TIME_WAIT socket*/
optval=1;
ret = setsockopt(sk, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));


Vadi il manuale o, meglio, testi tipo GAPiL per dettagli

kylnas1
08-07-2005, 17:55
Originariamente inviato da Ikitt
Aggiungi questo subito dopo la socket():


/*reuse a TIME_WAIT socket*/
optval=1;
ret = setsockopt(sk, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));


Vadi il manuale o, meglio, testi tipo GAPiL per dettagli
Questo il codice, ma sembra non funzionare:


if ((listener = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
if (setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) {
perror("setsockopt");
exit(1);
}

Loading