Bonjour à toutes et à tous.

Vous ai t'il déjà arrivé d'avoir le buffer passé en paramètre de recv() prendre la valeur de celui passé en paramètre de send() ?

Contexte :
J'ai trois thread, un qui traite les données à envoyer, un qui traite les données reçues et le dernier qui communique avec un serveur.

Reception :
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
	fd_set fdRead;
	int n;
	struct timeval timeoutSel;
	char buffer[256];
 
	if(Gprs_Call_State < GPRS_CALL_TCP_DISCONNECT_IN_PROGRESS && Gprs_Call_State >= GPRS_CALL_TCP_CONNECTED)
	{
		timeoutSel.tv_sec = time;
		timeoutSel.tv_usec = 0;
 
		FD_ZERO(&fdRead);
		FD_SET(sockfd, &fdRead);
		if(select(sockfd + 1, &fdRead, NULL, NULL, &timeoutSel) == -1)
		{
			perror("select()\r\n");
			return -1;
		}
		if(FD_ISSET(sockfd, &fdRead))
		{
			n = recv(sockfd, buffer, 256, 0);
 
			if( n == 0)/* Server down*/
			{
				perror("grps_recv_data()");
				exit(erno);
			}
			puts(buffer);
		}
	}
envoi
appel de gprs_send_data_by_TCP() par le thread de gestion des données a envoyer:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
int gprs_send_data_by_TCP(const char *data, const size_t length)
{
	if(strlen(TCP_buffer) < length && Gprs_Call_State < GPRS_CALL_DISCONNECT_START
			&& Gprs_Call_State >= GPRS_CALL_CONNECTED)
	{
		strcpy(TCP_buffer, data);
		return 0;
	}
	else
	{
		return -1;
	}
}
puis
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
 
if(TCP_buffer[0] != '\0')
{
        ret = send(sockfd, TCP_buffer, strlen(TCP_buffer), MSG_DONTWAIT);
	if(ret < 0)
	{ //Error
		perror("Error send");
		Gprs_Call_State = GPRS_CALL_TCP_DISCONNECT_START;
	}
	else if(ret < strlen(TCP_buffer))
	{
		puts("\r\nconnection interrupted \r\n");
		Gprs_Call_State = GPRS_CALL_TCP_DISCONNECT_START;
	}
	else
	{ //OK
		memset(TCP_buffer, '\0', GPRS_STRMAXSIZE);
		Gprs_Call_State = GPRS_CALL_TCP_CONNECTED;
	}
}
Merci