PDA

Visualizza la versione completa : [C] comando a tempo


/dev/null
27-08-2004, 03:57
Sto realizzando un server che, come tutti i servers, puo' ricevere delle connessioni da dei clients...
Ogni volta che un client lo contatta, il server si forka e manda il processo figlio ad occuparsi del client...
C'e' la triste possibilita' che un client si disconnetta prima di inviare dei dati necessari, facendo cosė bloccare la funzione read (http://www.lilik.it/~mirko/gapil/gapilsu91.html) del server :incupito: ....

Vorrei settare un timeout per ogni processo figlio, in modo che se dopo un tot di secondi non ha e' ancora terminato gli invio un bel SIGTERM o un SIGKILL e lo termino io :zizi:

Vorrei anche poter resettare questo timeout e farlo ripartire da zero ogni volta che il processo figlio riceve dei dati dal client...



Come posso fare tutto cio'?

:ciauz:

Ikitt
27-08-2004, 10:23
Originariamente inviato da /dev/null
C'e' la triste possibilita' che un client si disconnetta prima di inviare dei dati necessari, facendo cosė bloccare la funzione read (http://www.lilik.it/~mirko/gapil/gapilsu91.html) del server :incupito: ....

Vorrei settare un timeout per ogni processo figlio, in modo che se dopo un tot di secondi non ha e' ancora terminato gli invio un bel SIGTERM o un SIGKILL e lo termino io :zizi:

Vorrei anche poter resettare questo timeout e farlo ripartire da zero ogni volta che il processo figlio riceve dei dati dal client...


Se sei sotto *nix potresti usare select() impostando il timeout :ciauz:

/dev/null
27-08-2004, 10:48
Originariamente inviato da Ikitt
Se sei sotto *nix potresti usare select() impostando il timeout :ciauz: Sė, sotto Linux...
Ho gia' usato la poll in un paio d'occasioni, ma piu' che altro mi interessava eseguire queste operazioni per imparare ad usare funzioni a tempo...
Avevo letto qualcosa in proposito qui' (http://www.lilik.it/~mirko/gapil/gapilsu148.html), ma non ho capito come utilizzarlo e volevo provare a comprenderlo con questo esempio, dato che potrei voler bloccare un processo per motivi non riguardanti le operazioni di i/o (questo esempio mi sembra abbastanza generico, ma ne vanno benissimo anche altri)... :D

Loading