Mixter による生の UDP ソケットに関する有名なネットワーク チュートリアルを読んでいました。
unsigned short /* this function generates header checksums */
csum (unsigned short *buf, int nwords)
{
unsigned long sum;
for (sum = 0; nwords > 0; nwords--)
sum += *buf++;
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
return ~sum;
}
関数には空の文字配列が渡されます。
char datagram[4096];
「ipヘッダー、tcpヘッダー、およびペイロードを含む」はずです。また、「nwords」である整数が渡されます。関数は次のように呼び出されます。
iph->ip_sum = csum ((unsigned short *) datagram, iph->ip_len >> 1);
ここで、「iph->ip_len」は IP ヘッダーの全長です。私が混乱しているのは、データグラムが "(unsigned short *)" にキャストされる理由と、これが文字配列に与える影響です。また、チェックサムアルゴリズムがどのように機能するかは知っていますが、実際のコードと、各ステップが実行される理由については混乱しています。誰かがキャスティングと、関数の各行が何をするかを説明してもらえますか?
これはチュートリアルです: http://www.cs.binghamton.edu/~steflik/cs455/rawip.txt