Hlavní navigace

Názor k článku Sokety a C/C++: program ping od vdecny ctenar - Program mi nešel přeložit kvůli konstrukci v funkci...

  • Článek je starý, nové názory již nelze přidávat.
  • 13. 4. 2009 14:05

    vdecny ctenar (neregistrovaný)
    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);
    }