Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    7

    [C] chiudere un processo padre dal figlio

    Ciao a tutti, ho il seguente problema:

    sto sviluppando un applicazione "ftp" semplice (e sottolineo semplice data la mia inesperienza). Fra i requisiti di questa applicazione c'è il fatto che ogni qual volta un client si connette al server il server deve generare un figlio (tramite fork() ) che ne gestisca le richieste;

    tuttavia il client deve prevedere un comando "bye" che chiude la connessione col server e chiude anche il server!

    io ho strutturato il client in questo modo:
    codice:
    int main(){
           creo il socket
           inizializzo il socket
           mi connetto al server
    
    while(1){
           ricevo un comando
           lo invio al server
           eseguo la parte di comando che spetta al client
           }
        
           chiudo il socket
           exit(0);
    }
    Il server invece è fatto cosi:

    codice:
    int main() {
              creo socket
              inizializzo socket e porte
              creo coda di backlog
    while(1){
              accetta la connessione
    
              fork()
              if (pid == 0)
              close (socket padre)
         while(1){ 
              aspetta un comando 
              controlla che cosa chiede ed eseguilo
              }
         }
    close socket_padre
    exit(0);
    }
    tuttavia se inserisco una funzione "bye" nel server dopo la fork è chiaro che questa mi chiuderà il figlio mentre io devo chiudere tutto!!

    suggerimenti?
    grazie mille a tutti :-)

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    867
    Stai parlando di un programma in ambiente unix ?

    Se si devi predisporre il padre a ricevere segnali du un certo tipo, e poi inviare questo segnale dal figlio al momento di terminare tutto....

    metti questo nel padre
    codice:
    signal(SIGUSR1,termina);
    e questo nel figlio
    codice:
    kill(getppid(),SIGUSR1);
    ovviamente nel padre devi anche definire la funzione termina
    in cui metti tutti quello che deve eseguire quando gli arriva il segnale..

    Ciao ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    867
    mi sono accorto ora che la discussione era vecchiotta...

    Ma pazienza....

    cia cia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.