PDA

View Full Version : [C] server,thread e broken pipe


Arpeda
20-06-2004, 23:59
Ciao ragazzi,
sto implementando un server per un semplice gioco. Per ogni connessione che arriva creo un thread. Il problema mi si presenza se provo a chiudere un client, in questo caso il server riceve SIGPIPE, che ahimè non riesco a gestire correttamente, ed ottengo la chiusura del processo. Ora vi chiedo 2 cose:
1) è una buona idea bloccare o ignorare questo tipo di segnale? se non lo è,avete alternative?
2) se la 1 è affermativa come posso fare?
ho provato ad usare

sigemptyset(&act);
sigaddset( &act, SIGPIPE );
pthread_sigmask(SIG_BLOCK, &act, NULL);

in modo da cambiare il modo di gestire il segnale, ma tutto quello che sono riuscito ad ottenere è una mezza vittoria. In pratica Il segnale non mi chiude il processo come mi accadeva in precedenza, ma la cpu schizza al 70%, e l'unica cosa da fare è killare il server :(

Sapete aiutarmi?
Ciao
Arpeda

Ps. in allegato mi metto il codice che ho fatto fin'ora, il file è solo rinominato non zippato

Arpeda
21-06-2004, 16:33
problema risolto, riesco a bloccare il SIGPIPE nel modo in cui avevo scritto prima, ma c'erano alcuni errori nello switch, per cui il thread iniziava a ciclare senza controllo. va tolto il break al default e va impostata la variabile cicla = 0; ogni volta che si verifica un errore il lettura.

Ciao
Arpeda

ilsensine
22-06-2004, 09:46
Vuoi dire problema "aggirato" ;)

Se non ti serve gestire il sigpipe, non ignorarlo: puoi semplicemente non farlo generare. Basta che aggiungi MSG_NOSIGNAL tra i parametri delle funzioni sui socket. Ad esempio:
ret = send(fd, buf, sz, MSG_NOSIGNAL);

Le pagine man documentano MSG_NOSIGNAL, ma andrebbero lette ;)

Arpeda
22-06-2004, 17:00
Prezioso come al solito!

GRAZIE
Arpeda