TUBE Cannal Pipe

cs_raphael59540 Messages postés 7 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 10 mars 2011 - 7 déc. 2006 à 12:15
cs_raphael59540 Messages postés 7 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 10 mars 2011 - 11 déc. 2006 à 10:06
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

AndreJAO Messages postés 24 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 2 septembre 2007
10 déc. 2006 à 12:47
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;
}
0
AndreJAO Messages postés 24 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 2 septembre 2007
10 déc. 2006 à 12:58
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
0
cs_raphael59540 Messages postés 7 Date d'inscription lundi 21 mars 2005 Statut Membre Dernière intervention 10 mars 2011
11 déc. 2006 à 10:06
Merci  andre JAO je teste
0
Rejoignez-nous