Ok hai risposto alla mia domanda. Già che ci sono ne pongo un'altra, senza aprire un ulteriore thread per il medesimo argomento:
Se io ho un ciclo infinito che chiama la accept, un eventuale segnale interrompe questa funzione bloccante. Ma se il il processo non ha ancora completato tutte le sue funzioni, dunque dovrebbe effettuare altre chiamate alla accept, come può essere "rimandata" la gestione del segnale? Se ignorassi il segnale prima di accept, riattivandolo subito dopo non risolverei nulla, perchè gestirebbe al massimo 1 sola connessione avvenuta dopo l'arrivo del segnale. Ma non posso neppure ignorarlo per tutta la durata del blocco, perchè non uscirei mai dal ciclo.... In PSEUDOcode:
codice:
//Se ignorassi qui il segnale con signal(SIGNAL, SIG_IGN); non verrebbe mai riabilitato.
while(run){
//Ignorandolo qui avrei al più una sola connessione dopo l'arrivo del segnale
accept();
//Riattivazione gestore per il segnale
}
//signal(SIGNAL, gestore); mai eseguito...
Per essere più chiari: supponiamo che debba chiamare 5 volte la accept, con un tempo di esecuzione pari a 10 secondi per terminare tutte le funzioni. Se il segnale arriva prima dei 10 secondi, perderei delle connessioni. Però il processo non può sapere a priori quante connessioni deve accettare... Quindi, come risolvere?