Existe-t-il une fonction ou un code préexistant que je peux utiliser pour calculer la sum de contrôle d’un segment TCP dans un programme POSIX

J’écris un petit programme POSIX et je dois calculer la sum de contrôle d’un segment TCP. J’aimerais utiliser une fonction existante afin d’éviter d’en écrire un moi-même.

Quelque chose comme (pseudocode):

char *data = .... u16_integer = computeChecksum(data); 

J’ai cherché sur le web mais je n’ai pas trouvé la bonne réponse, aucune suggestion?

Ici, c’est pris plus ou moins directement de la RFC:

 uint16_t ip_calc_csum(int len, uint16_t * ptr) { int sum = 0; unsigned short answer = 0; unsigned short *w = ptr; int nleft = len; while (nleft > 1) { sum += *w++; nleft -= 2; } sum = (sum >> 16) + (sum & 0xFFFF); sum += (sum >> 16); answer = ~sum; return (answer); }