1

ソケットについて学び、2 つの構造体 Sockaddr と sockaddrin があることがわかりました。

ガイドでは、ある構造体を別の構造体と比較するために構造体に 8 文字の char を含めるように言われていますが、その仕組みがわかりません。

intをchar [2]にキャストするようなものですか?

構造体をどのように扱うのですか?

ありがとうございました。

4

1 に答える 1

2

SOCKADDRは、ADDRESS_FAMILYフィールドと、そのフィールドの後に14バイト(char型)を含む汎用構造です。sin_familyフィールド(ADDRESS_FAMILY)の値に応じて、後続の14バイトは異なる方法で解釈されます。

sin_family値がAF_INETと等しい場合、SOCKADDR構造体は実際にはSOCKADDR_IN構造体です。これは、14バイトが実際には次のように解釈される必要があることを意味します。

sin_portの場合は2バイトsin_addrの場合は4バイト使用されないが、SOCKADDR構造と同じサイズにするためにそこにある必要がある8バイトのパディング。

したがって、SOCKADDRへのポインターがあり、sin_familyフィールドを調べて、それがAF_INETと等しい場合は、ポインターをSOCKADDR_INへのポインターにキャストして、その方法でフィールドにアクセスできます。

于 2012-11-24T05:00:30.217 に答える