bonsoir,
j'ai créé un reseau grace aux CSocketFile et CArchive.
je voudrais gérer la déconnexion brutale du client
sur mon serveur j'ai ce bout de code:
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
29
30
31
32
33
34
35
36
void CNetEngine::Send3D(UINT id, CData* data)
{
	if (sockClient[id] != NULL)
	{
		/// Envoie de l'id du message
		/// Recuperer l'exception pour la fermeture précipité du client
		netArchiveSend[id]->Write(&data->ID,sizeof(int));
		TRY
		{
			netArchiveSend[id]->Flush();
		}
		CATCH(CArchiveException, e)
		{
			sockClient[id]->Close();
			delete sockClient[id];
			sockClient[id] = NULL;
		}
		END_CATCH
	}
	if (sockClient[id] != NULL)
	{
		/// Envoie de l'objet
		data->Serialize(*netArchiveSend[id]);
		TRY
		{
			netArchiveSend[id]->Flush();
		}
		CATCH(CArchiveException, e)
		{
			sockClient[id]->Close();
			delete sockClient[id];
			sockClient[id] = NULL;
		}
		END_CATCH
	}
}
j'utilise la fonction d'envoie dans un timer et voila comme je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
void CSPIDView::OnTimer(UINT nIDEvent)
{
	.....
	MaClasse.Send3D(id,&pDoc->Statut);
	if (MaClasse.GetClient(id) == NULL)
	{
		AfxMessageBox("Deconnexion du poste %d",id);
		MaClasse.CloseSocket(id);
	}
	.....
}
le probleme est que lorsque je débug, je m appercois que a cette ligne netArchiveSend[id]->Flush(); je rentre dans une exception.

Ce que je voudrais c'est que si j arrive pas a flush, alors je ferme la socket et libere la mémoire des variables qui y sont associés.

merci