Hello alors je bosse sous visual C++ 6.0 et je voudrais que ma thread ne tente pas un recv si le cable est débranché ou si la connexion a planté.

J'aimerais savoir comment on peu récupéré un evenement pour si le cable est débranché ou la connexion coupée.

J'ai essayer select mais ç marche po snif

voila le 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
 
LRESULT CThreadTCP::BoucleTCP(WPARAM wParam,LPARAM lParam)
{
	if(m_config)
	{
		//Chaine de carac en BYTE
		char result[200];
		//-----------------------
 
		DWORD lp=0; //Argument pour le blocant
 
		m_Tboucle = (CThreadTraitement *)lParam;
 
		//DEBUT DE WINSOCK
		WORD wVersionRequested;
		wVersionRequested = MAKEWORD( 2, 2 );
 
		WSADATA wsaData;
		int wsaret=WSAStartup(wVersionRequested,&wsaData);
		if(wsaret && AfxSocketInit(&wsaData))
		{
			//ERREUR DE WINSOCK
		}
		else
		{
			//DEFINITION DES SOCKET PUB et PRIVEE
 
			SOCKET A = socket(AF_INET,SOCK_STREAM,0);
			if (A == SOCKET_ERROR)
			{
				//ERREUR DE SOCKET
			}
			struct sockaddr_in server;
			server.sin_family = AF_INET;
			server.sin_port = htons(m_Port);
			server.sin_addr.s_addr = INADDR_ANY;
 
			sockaddr sockAddr_DIST;
			int p = sizeof(sockAddr_DIST);
 
			if(ioctlsocket(A,FIONBIO,&lp) != SOCKET_ERROR)//to BLOCANT
			{
				//REACTIVATION DE LA BR A
				if (bind(A, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)
				{
					//ERREUR DE BIND
				}
 
				if(listen(A,5) == SOCKET_ERROR)
				{
					//ERREUR DE LISTEN
				}
				else
				{
					int test;
					char u;
					int increm;
					while(m_on_tcp)
					{
						//Accepter la connextion et Création du CV
						SOCKET B;
						B = accept(A,&sockAddr_DIST,&p);
						if(B == SOCKET_ERROR)	
						{
							//ERREUR DE ACCEPT
						}
						else
						{
							ioctlsocket(B,FIONBIO,&lp);
							m_socketb = true;
							while(m_socketb)
							{
								increm = -1;
								test = 0;
								t = 'a';
								u = 'a';
								while((t != 10) && (u != 13) && m_socketb)
								{
									u = t;
									test = recv(B,&t,1,0);
									if(test == 1)
									{
										increm++;										
										result[increm] = t;
									}
									if(test == SOCKET_ERROR)
									{
										m_socketb = false;
									}
								}
								if(increm <= 0)
								{
									//Rien reçut
								}
								else
								{
									result[increm+1]='\0';
									if(Validation(nbVirg((BYTE *)result),result[3],result[4],result[5]))
									{
										//TRAITEMENT DE LA TRAME PAR CTRAITEMENT
										if (m_Tboucle != NULL && m_on_tcp) 
										{	
											BYTE * env = new BYTE[200];
											strcpy((char *)env,(char *)result);
											::PostThreadMessage(m_Tboucle->m_nThreadID,
																WM_THREAD_TRAIT
																,NULL
																,LPARAM(env)
																);
											result[0]='\0';
										}
										//TRAITEMENT DE LA TRAME PAR CTRAITEMENT
									}
								}
							}
						}
					}		
				}
 
			}
			else 
			{
				//ERREUR DE IOCTL
			}
		}
	}
	return 1;
}
Merci de votre aide

anaël