Program mi nešel přeložit kvůli konstrukci v funkci checksum, kterou současná verze g++ nedovoluje. Použil jsem funkci z iputils. Tak jenom ušetřím hledání ostatním začátečníkům. Děkuji za tento skvělý seriál!
unsigned short checksum(const unsigned short *addr, register int len)
{
register int nleft = len;
const unsigned short *w = addr;
register unsigned short answer;
register int sum = 0;
while( nleft > 1 ) {
sum += *w++;
nleft -= 2;
}
/* mop up an odd byte, if necessary */
if( nleft == 1 ) {
sum += htons(*(u_char *)w << 8);
}
/*
* add back carry outs from top 16 bits to low 16 bits
*/
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
sum += (sum >> 16); /* add carry */
answer = ~sum; /* truncate to 16 bits */
return (answer);
}