TUBE Cannal Pipe

Signaler
Messages postés
7
Date d'inscription
lundi 21 mars 2005
Statut
Membre
Dernière intervention
10 mars 2011
-
Messages postés
7
Date d'inscription
lundi 21 mars 2005
Statut
Membre
Dernière intervention
10 mars 2011
-
Bonjour,
J'utilise la fonction  CreateNamedPipe(*name,PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE,1,
   4096,   4096,    2000,     NULL);
Mais j'ai remarqué que lors que mon prog plante sans avoir quitter correctement je ne peut pas recreer le meme pipe nommé, il faut que je change de nom.
Pouvez vous m'aider a controler la presence du pipe nommé et de le supprimer
Merci

3 réponses

Messages postés
24
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
2 septembre 2007

Suggestion pour la création
hPipeInst = CreateNamedPipe(
lpszPipename, // pipe name
PIPE_FLAG_OVERLAPPED |
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, 4096, // output buffer size
4096, // input buffer size
2000, // client time-out
NULL);
Pour la suppression en général il s'agit de la problématisue du cilient et non pas du serveur. Pour identifier les clients tu peux utiliser NetFileEnum et pour les forcer à lacher le pipe NetSessionDel
cela donnerait àpeu près ceci:
//A invoquer avant création du pipe par le process serveur
//szPrefix=ton nom de pipe
//bClose flag pour déconnecter le client (à défaut simple comptage
DWORD GetFileSession(char *szPrefix,BOOL bClose)
{
NET_API_STATUS nas;
FILE_INFO_3 *fi3 = NULL;
DWORD prefmaxlen=1024;
DWORD entriesread;
DWORD totalentries;
TCHAR netPrefFile[80];//,netserver[16];
char tmp[80];
MultiByteToWideChar(CP_ACP, 0, szPrefix, -1, netPrefFile, 79);

nas= NetFileEnum(NULL,//netserver,
netPrefFile,//pPref,//NULL,
NULL,3,(LPBYTE *)&fi3,
prefmaxlen,
&entriesread,
&totalentries,
NULL);
if (fi3)
{
if(WideCharToMultiByte(CP_ACP, 0,fi3->fi3_pathname,-1,tmp,80,NULL,NULL))
{
if(0!=strnicmp(tmp,szPrefix,strlen(tmp)))
totalentries=0;
else if(bClose)
{
NetSessionDel(NULL, NULL,fi3->fi3_username);
NetApiBufferFree(fi3);
return C_GetFileSession(szPrefix,FALSE);
}
}
else
totalentries=0;
NetApiBufferFree(fi3);

}
return totalentries;
}
Messages postés
24
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
2 septembre 2007

Rectification faute de frappe dans mon exemple
return C_GetFileSession(szPrefix,FALSE);
il fallait lire return GetFileSession(szPrefix,FALSE);
Ceci pour interrompre l'itération qui est mise à mal après un NetSessionDel bien sur
Messages postés
7
Date d'inscription
lundi 21 mars 2005
Statut
Membre
Dernière intervention
10 mars 2011

Merci  andre JAO je teste