xllmnrd を製作する過程で習得した IPv6 ソケット API に関する知見を、少しずつ書いていこうという不定期連載企画です。反応が薄ければ うやむやにするかもしれませんが…。
さて記念すべき第 1 回ですが、まずは sockaddr_in6
構造体の紹介で始めたいと思います。IPv4 の sockaddr_in
構造体に対応するものですが、この構造体には以下のメンバーがあります (OS によっては他のメンバーがあることもありますが ここでは触れません):
sa_family_t sin6_family;
- アドレスファミリーです。IPv6 では
AF_INET6
を指定します。 in_port_t sin6_port;
- ポート番号です。IPv4 と同様にネットワーク バイト オーダーで指定します。
uint32_t sin6_flowinfo;
- これは IPv6 に特有のメンバーで、トラフィック クラスとフロー情報を指定します。とりあえず 0 としておきましょう。
struct in6_addr sin6_addr;
- お待ちかね、IPv6 アドレスです。
in6_addr
構造体については後述します。 uint32_t sin6_scope_id;
- これも IPv6 に特有のメンバーで、スコープ ID を指定します。スコープを指定する必要がない場合は 0 としておきます。
IPv6 アドレスを指定する in6_addr
構造体には以下のメンバーがあります:
uint8_t s6_addr[16];
- IPv6 アドレスをバイト列で指定します。IPv4 とは違ってバイト列なので、バイト オーダーは意識する必要がありません。
第 1 回はここまでにしておきます。次回はいつになるか分かりませんが、期待しないで待っていてください。