[C] Gestione Segnali Server/Client

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
GIus90
Prode Principiante
Messaggi: 7
Iscrizione: mercoledì 11 maggio 2016, 18:09
Distribuzione: Ubuntu 15.10
Sesso: Maschile

[C] Gestione Segnali Server/Client

Messaggio 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.
Ultima modifica di GIus90 il sabato 14 maggio 2016, 12:37, modificato 1 volta in totale.
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: [C] Gestione Segnali Server/Client

Messaggio 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
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
GIus90
Prode Principiante
Messaggi: 7
Iscrizione: mercoledì 11 maggio 2016, 18:09
Distribuzione: Ubuntu 15.10
Sesso: Maschile

Re: [C] Gestione Segnali Server/Client

Messaggio 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 ?
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti