Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1787 connectés 

  FORUM HardWare.fr
  Programmation
  C

  daemon & serveur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

daemon & serveur

n°1702057
majong
Posté le 13-03-2008 à 20:41:08  profilanswer
 

Bonjour, j'ai fait un programme serveur en c sous linux mais le programme s'arrete lorsque je ferme la console. Que puis je faire  pour eviter qu'il s'arrête ? Il y a t-il quelque chose à intégrer ?
Le code se présente sous cette forme (le programme marche bien):
(le serveur traite les données de chaque clients connectés)
 
static void app(void)
{
   SOCKET sock = init_connection();
   char buffer[BUF_SIZE];
   int actual = 0;
   int max = sock;
   Client clients[MAX_CLIENTS];
   fd_set rdfs;
   while(1)
   {
      int i = 0;
      FD_ZERO(&rdfs);
      FD_SET(STDIN_FILENO, &rdfs);
      FD_SET(sock, &rdfs);
      for(i = 0; i < actual; i++)
      {
         FD_SET(clients[i].sock, &rdfs);
      }
      if(select(max + 1, &rdfs, NULL, NULL, NULL) == -1)  
      {
         perror("select()" );
         exit(errno);
      }
      if(FD_ISSET(STDIN_FILENO, &rdfs))  
      {
         break;
      }
      else if(FD_ISSET(sock, &rdfs))
      {
         SOCKADDR_IN csin = { 0 };
         size_t sinsize = sizeof csin;
         int csock = accept(sock, (SOCKADDR *)&csin, &sinsize);
         if(csock == SOCKET_ERROR)
         {
            perror("accept()" );
            continue;
         }
         if(read_client(csock, buffer) == -1)
         {
            continue;
         }
         max = csock > max ? csock : max;
         FD_SET(csock, &rdfs);
         Client c = { csock };
        strncpy(c.name, buffer, BUF_SIZE - 1);
         c.name[strlen(buffer)-1]=0;
        if (accepter_client(c))
        {
           clients[actual] = c;
                       actual++;
           write_client(c.sock,"connexion accepté\n" );
                   }
       }
       else
       {
           int i = 0;
           for(i = 0; i < actual; i++)
           {
                 if(FD_ISSET(clients[i].sock, &rdfs))
                 {
                       Client client = clients[i];
                       int c = read_client(clients[i].sock, buffer);
                       if(c == 0)
                       {
    closesocket(clients[i].sock);
                            remove_client(clients, i, &actual);
                            strncpy(buffer, client.name, BUF_SIZE - 1);
                            strncat(buffer, " disconnected !", BUF_SIZE - strlen(buffer) - 1);
                       }
                       else
                       {
     traiter_client(buffer);
                        }
            break;
                 }
           }
       }
   }
   clear_clients(clients, actual);
   end_connection(sock);
}

mood
Publicité
Posté le 13-03-2008 à 20:41:08  profilanswer
 

n°1702072
_darkalt3_
Proctopathe
Posté le 13-03-2008 à 21:11:44  profilanswer
 

./monprogramme &


 


---------------
Töp of the plöp
n°1702078
majong
Posté le 13-03-2008 à 21:36:29  profilanswer
 

si c'était aussi simple. Le problème c'est que en fermant la console le processus s'en va aussi car il dépend directement de se dernier.

n°1702079
schnapsman​n
Zaford Beeblefect
Posté le 13-03-2008 à 21:39:37  profilanswer
 

Faut imuniser le process au signal SIG_HUP, en utilisant la fonction signal().

n°1702080
_darkalt3_
Proctopathe
Posté le 13-03-2008 à 21:39:54  profilanswer
 

Comment ça, ton programme dépend de la console ?


---------------
Töp of the plöp
n°1702086
majong
Posté le 13-03-2008 à 21:46:58  profilanswer
 

Ben oui, moi si je ferme la fenetre putty et que je me reconnecte je n'ai plus de processus. ps aux|grep monprogramme,  ben rien.

n°1702088
majong
Posté le 13-03-2008 à 21:48:27  profilanswer
 

Qu'est ce que c'est cette fonction signal ?
Je le met où dans le main ?

n°1702096
majong
Posté le 13-03-2008 à 22:02:08  profilanswer
 

Est ce quelqu'un pourra me dire si la solution est en utilisant fork() ?

n°1702296
matafan
Posté le 14-03-2008 à 11:34:43  profilanswer
 
n°1702476
tpierron
Posté le 14-03-2008 à 15:20:53  profilanswer
 

man 3 daemon


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  daemon & serveur

 

Sujets relatifs
[Webservice] Serveur Xfire & génération d'un client à partir d'un WSDLCréation d'un script de dézipage sur serveur
recuperer l'IP d'un serveur web en javaserveur/client linux
PHPExcel : problème de temps d'exécution sur le serveur[Résolu] file_exists et erreurs 404 serveur.
Radio Zanorg sur serveur FTP[PHP] Après update serveur. Script de log ne fonctionne plus
connexion serveur/client pythonProblème connexion serveur sql server
Plus de sujets relatifs à : daemon & serveur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR