Bonjour,

Je dois calculer le CRC d'une trame, représenté par une structure dans mon programme, que j'envois à un server sur l'adresse loopback.
Le problème est que j'ai une segmentation fault ou si je fais un petit changement, le CRC n'est jamais a 0 pour une trame non endommagée.

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
 
unsigned short cksum(void *ipt, int len)
{
  long sum = 0;
  unsigned short *ip;
  ip = ipt;
 
  while(len > 1)  
  {
    sum += *(ip)++;
    if(sum & 0x80000000)
    {
       sum = (sum & 0xFFFF) + (sum >> 16);
       len -= 2;
     }
  }
 
  if(len)
    sum += (unsigned short) *(unsigned char *) ip;
  while(sum >> 16)
    sum = (sum & 0xFFFF) + (sum >> 16);
 
  return ~sum;
}
Si je laisse le code tel quel, le programme s'arrête avec un beau Segmentation Fault.
Par contre si je met
Code : Sélectionner tout - Visualiser dans une fenêtre à part
(unsigned short *)ip++;
la je n'ai plus ce problème mais si je calcule 2 fois le crc il doit être a 0 à la seconde fois et il ne l'est pas.
J'initialise à 0 un champ CRC dans ma structure et je développe sous Linux Mandriva 2007.

Merci

Bonne soirée