Bonjour tout le monde,

J'ai deux processus que je veux faire communiquer infinimenent à travers un pipe: P1 crée le pipe et P2 est supposé s'y connecter après quelques instants et après ils restent en communication inifiniment.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//création du pipe
HANDLE hPipe;
	hPipe = CreateNamedPipe( 
          g_szPipeName,             // pipe name 
          PIPE_ACCESS_DUPLEX,       // read/write access 
          PIPE_TYPE_MESSAGE |       // message type pipe 
          PIPE_READMODE_MESSAGE |   // message-read mode 
          PIPE_WAIT,                // blocking mode 
          PIPE_UNLIMITED_INSTANCES, // max. instances  
          BUFFER_SIZE,              // output buffer size 
          BUFFER_SIZE,              // input buffer size 
          NMPWAIT_USE_DEFAULT_WAIT, // client time-out 
          NULL);                    // default security attribute 

//Attente de connexion d'un client
BOOL bClientConnected = ConnectNamedPipe(hPipe, NULL);
     
     if (FALSE == bClientConnected)
     {
          printf("\nError occurred while connecting to the client: %d", GetLastError()); 
          CloseHandle(hPipe);
          return 1;  //Error
     }
     else
     {
          printf("\nConnectNamedPipe() was successful.");
     }
La fonction ConnectNamedPipe met le processus P1 dans un état d'attente infinie (la durée d'attente,dans mon cas, est inifinie puisque je précise pas de timeout dans la création du pipe). Maintenant une fois P2 se connecte, la fonction va retourner true et le processus P1 passe à l'instruction qui suit.
Ma question est, si P2 se déconnecte(par exemple il s'arrête pour une raison inconnue et que je dois le relancer automatiquement par un processus de controle d'activité par exemple), quel sera l'état de P1?
a) Toujours connecté ( donc la boucle infinie de communication que je dois faire doit être faite dans le writefile )
b) Déconnecté ( donc ma boucle infinie doit être recommencée à partir de la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
//Attente de connexion d'un client
BOOL bClientConnected = ConnectNamedPipe(hPipe, NULL);
Merci pour vos réponses