Pagina 1 di 1

[C] Gestione Segnali Server/Client

Inviato: venerdì 13 maggio 2016, 3:37
da GIus90
Sto concludendo il mio progetto della bacheca elettronica remota che consiste in un server sempre attivo che immagazzina i messaggi ricevuti dai client in un file di testo(le richieste dei client vengono gestite in maniera sequenziale dal server). Mi interessava sapere come fare a non far bloccare il server quando si chiude il client durante un operazione. Inoltre volevo gestire la chiusura del socket dopo un timeout affinchè un client non rimanga ad occupare il server per troppo tempo.

Re: [C] Gestione Segnali Server/Client

Inviato: venerdì 13 maggio 2016, 15:17
da SuperStep
se il tuo programma deve essere concorrente allora devi utilizzare i concetti di multiprogrammazione (fork, p_thread) esempio qui: http://www.csl.mtu.edu/cs4411.ck/www/NO ... reate.html

per il timeout delle socket: http://www.freebsd.org/cgi/man.cgi?quer ... &sektion=2
in particolare:
SO_SNDTIMEO set timeout value for output
SO_RCVTIMEO set timeout value for input

Re: [C] Gestione Segnali Server/Client

Inviato: venerdì 13 maggio 2016, 16:56
da GIus90
il mio programma deve essere sequenziale, quindi non ho necessità di farlo multithread(il server una volta acceso è in ascolto su una determinata socket, appena si connete un client, soddisfa le richieste e quando si disconnette passa a servire i client successivi, in poche parole il server "serve" un client la volta, se un altro client si connette, esso rimane in Backlog in attesa che si liberi il server). Ho priorità di gestire la chiusura inaspettata del client, cioè se un client si disconnette durante un operazione, devo fare in modo che il serve vada avanti a servire gli altri client . Per come ho implementato il programma, appena chiudo la finestra del client durante un operazione, il server crasha. Non ho la più pallida idea di come risolvere questa cosa (forse SIGPIPE??).
Ho letto che un processo figlio può mandare un segnale al processo padre e quest' ultimo può decidere se gestire il segnale ricevuto o ignorarlo. Il mio dubbio è come fa un client a mandare un segnale al server e quindi il server a decidere di chiudere il client ?