Hello guys

I'm having difficulty in a routine that will receive data via Socket and Send to a CAN interface.

My routine identifies a Bytes sequence, separates 13 bytes and processes, however some part of the code causes it to sometimes process the same buffer twice, I could not identify where ...

Code:
//Receive a message from client
    while( (readSize = recv(sock , mensagemRecebida , TAM_BUFFER_RX_SOCKET , 0)) > 0 )
    {
    	for(contador=0; contador<readSize; contador++)
    		args.arg1Dados[contador] = mensagemRecebida[contador];
		args.arg2readSize = readSize;

    	if(pthread_create( &thread_Processar , NULL ,  &ProcessarDadosRecebidos , (void *)&args) < 0)
		{
			perror("could not create thread");
			return 1;
		}

    	//clear the message buffer
    	memset(mensagemRecebida, 0, TAM_BUFFER_RX_SOCKET);
    }
Code:
struct arg_struct {
    unsigned char arg1Dados[TAM_BUFFER_RX_SOCKET];
    int arg2readSize;
};


void *ProcessarDadosRecebidos(void *arguments)
{
	int idxNovoPacote=0;
	int idxPosicaoInicioCAN = 0;
	int idxPosicaoCharPacoteLido=0;

	int ID_DESTINO_BT1 = 0;
	int ID_DESTINO_BT2 = 0;
	int DATASIZE = 0;
	int ID_ORIGEM = 0;
	int IDX_DEVICE = 0;
	int IDX_FUNCAO_DEVICE = 0;

	struct arg_struct *args = arguments;

	unsigned char mensagemCANSeparada [DEFAULT_PACKET_CAN_SIZE];

	for(idxPosicaoCharPacoteLido=0; idxPosicaoCharPacoteLido<args->arg2readSize; idxPosicaoCharPacoteLido++)
	{
		if (idxPosicaoCharPacoteLido + 7 < args->arg2readSize)
		{
			ID_DESTINO_BT1 = idxPosicaoCharPacoteLido;
			ID_DESTINO_BT2 = idxPosicaoCharPacoteLido + 1;
			DATASIZE = idxPosicaoCharPacoteLido + 4;
			ID_ORIGEM = idxPosicaoCharPacoteLido + 5;
			IDX_DEVICE = idxPosicaoCharPacoteLido + 6;
			IDX_FUNCAO_DEVICE = idxPosicaoCharPacoteLido + 7;

			if (args->arg1Dados[ID_DESTINO_BT1] == 0)
			{
				if (args->arg1Dados[ID_DESTINO_BT2] == 0)
				{
					if (args->arg1Dados[DATASIZE] == 8)
					{
						if (args->arg1Dados[ID_ORIGEM] == 0)
						{
							if (args->arg1Dados[IDX_DEVICE] > 0)
							{
								if (args->arg1Dados[IDX_FUNCAO_DEVICE] > 0)
								{
									idxPosicaoInicioCAN = idxPosicaoCharPacoteLido;

									printf("Packet SEQ: %d Start Idx Of Packet %d Total Size: %d", contadorDebug, idxPosicaoInicioCAN, args->arg2readSize);

									for(idxNovoPacote=0; idxNovoPacote<DEFAULT_PACKET_CAN_SIZE && idxNovoPacote<args->arg2readSize; idxNovoPacote++)
									{
										if(idxPosicaoInicioCAN < args->arg2readSize)
										{
											mensagemCANSeparada[idxNovoPacote] = args->arg1Dados[idxPosicaoInicioCAN];
											idxPosicaoInicioCAN++;
										}
										else
											printf("Tentativa de acessar indíce %d maior que a leitura de dados %d", idxPosicaoInicioCAN, args->arg2readSize);
									}

									printf(" Last Byte: %d\n", mensagemCANSeparada[idxNovoPacote - 1]);

									idxPosicaoCharPacoteLido = idxPosicaoInicioCAN - 1;
									contadorDebug++;
									WriteCAN(mensagemCANSeparada, DEFAULT_PACKET_CAN_SIZE);
								}
							}
						}
					}
				}
			}
		}
	}

	idxPosicaoInicioCAN = 0;
	// TODO - TRATAR SOBRAS DE PACOTES

	return NULL;
}
Test Send Data (Last byte is Sequential)
Seq[0] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 0
Seq[1] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 1
Seq[2] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 2
Seq[3] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 3
Seq[4] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 4
Seq[5] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 5
Seq[6] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 6
Seq[7] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 7
Seq[8] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 8
Seq[9] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 9
Seq[10] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 10
Aguardando...10
Seq[11] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 11
Seq[12] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 12
Seq[13] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 13
Seq[14] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 14
Seq[15] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 15
Seq[16] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 16
Seq[17] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 17
Seq[18] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 18
Seq[19] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 19
Seq[20] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 20
Seq[21] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 21
Aguardando...21
Seq[22] Send Bytes : 0 0 0 1 8 0 1 2 1 2 3 4 22
Log Output (Last byte should be Sequencial)
MapCANFrameToCharAndSend: Enviando dados CAN para SOCKET ID: 0 Size: 5
Packet SEQ: 0 Start Idx Of Packet 0 Total Size: 13 Last Byte: 0
Packet SEQ: 1 Start Idx Of Packet 13 Total Size: 130 Last Byte: 2
Packet SEQ: 2 Start Idx Of Packet 26 Total Size: 130 Last Byte: 3
Packet SEQ: 3 Start Idx Of Packet 39 Total Size: 130 Last Byte: 4
Packet SEQ: 4 Start Idx Of Packet 52 Total Size: 130 Last Byte: 5
Packet SEQ: 5 Start Idx Of Packet 65 Total Size: 130 Last Byte: 6
Packet SEQ: 6 Start Idx Of Packet 78 Total Size: 130 Last Byte: 7
Packet SEQ: 7 Start Idx Of Packet 91 Total Size: 130 Last Byte: 8
Packet SEQ: 8 Start Idx Of Packet 104 Total Size: 130 Last Byte: 9
Packet SEQ: 9 Start Idx Of Packet 117 Total Size: 130 Last Byte: 10

START REPEAT DATA Received:
Packet SEQ: 10 Start Idx Of Packet 0 Total Size: 130 Last Byte: 1
Packet SEQ: 11 Start Idx Of Packet 13 Total Size: 130 Last Byte: 2
Packet SEQ: 12 Start Idx Of Packet 26 Total Size: 130 Last Byte: 3

Packet SEQ: 13 Start Idx Of Packet 39 Total Size: 130 Last Byte: 4
Packet SEQ: 14 Start Idx Of Packet 52 Total Size: 130 Last Byte: 5
Packet SEQ: 15 Start Idx Of Packet 65 Total Size: 130 Last Byte: 6
Packet SEQ: 16 Start Idx Of Packet 78 Total Size: 130 Last Byte: 7
Packet SEQ: 17 Start Idx Of Packet 91 Total Size: 130 Last Byte: 8
Packet SEQ: 18 Start Idx Of Packet 104 Total Size: 130 Last Byte: 9
Packet SEQ: 19 Start Idx Of Packet 117 Total Size: 130 Last Byte: 10
Packet SEQ: 20 Start Idx Of Packet 0 Total Size: 13 Last Byte: 12
Packet SEQ: 20 Start Idx Of Packet 0 Total Size: 13 Last Byte: 12
Packet SEQ: 22 Start Idx Of Packet 0 Total Size: 13 Last Byte: 13
Packet SEQ: 23 Start Idx Of Packet 13 Total Size: 104 Last Byte: 15
Packet SEQ: 24 Start Idx Of Packet 26 Total Size: 104 Last Byte: 16
Packet SEQ: 25 Start Idx Of Packet 39 Total Size: 104 Last Byte: 17