sockaddr構造体は選択されたプロトコルによって変わります。sin*_familyパラメータを除いて、sockaddr構造体の内容はネットワークバイトオーダで表現されます。
sockaddrを使用するWinsock関数は、sockaddr構造体のポインタであると厳密に解釈しません。構造体は異なるアドレスファミリのコンテキストに違った解釈されます。唯一の必要条件は、構造体の最初のu_shortがアドレスファミリであることと、メモリバッファの総バイト数がsockaddr構造体を必要とする関数のnamelenパラメータに渡されることです。
SOCKADDR_STORAGE構造体も同様にソケットアドレス情報を格納し、その構造体はIPv4およびIPv6アドレス情報を格納するのに十分な大きさを持っています。SOCKADDR_STORAGE構造体はプロトコルファミリおよびプロトコルバージョンの非依存性を高め、開発を容易にします。sockaddr構造体の代わりにSOCKADDR_STORAGE構造体を使用することが推奨されます。SOCKADDR_STORAGE構造体はWindows Server 2003以降でサポートされています。
sockaddr構造体およびsockaddr_in構造体が以下のように定義され、IPv4で使用されています。その他のプロトコルにおいても類似した構造体が使用されます。
struct sockaddr { u_short sa_family; char sa_data[14]; };
struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; };
以下のsockaddr_in6およびsockaddr_in6_old構造体がIPv6で使用されます。
struct sockaddr_in6 { short sin6_family; u_short sin6_port; u_long sin6_flowinfo; struct in6_addr sin6_addr; u_long sin6_scope_id[8]; }; typedef struct sockaddr_in6 SOCKADDR_IN6; typedef struct sockaddr_in6 *PSOCKADDR_IN6; typedef struct sockaddr_in6 FAR *LPSOCKADDR_IN6;
struct sockaddr_in6_old { short sin6_family; u_short sin6_port; u_long sin6_flowinfo; struct in6_addr sin6_addr; };
Windows 95(Windows Socket 2 Update適用済み)、Windows 98以降 / Windows NT 4.0 以降
HSP 変数 | メンバ | |||
---|---|---|---|---|
メンバ名 | オフセット | サイズ | ||
sockaddr(0) | 下位ワード | sa_family | 0 | 2 |
上位ワード | wHighVersion | 2 | 14 | |
sockaddr(1) | ||||
sockaddr(2) | ||||
sockaddr(3) |
HSP 変数 | メンバ | |||
---|---|---|---|---|
メンバ名 | オフセット | サイズ | ||
sockaddr_in(0) | 下位ワード | sin_family | 0 | 2 |
上位ワード | sin_port | 2 | 2 | |
sockaddr_in(1) | sin_port | 4 | 4 | |
sockaddr_in(2) | sin_zero | 8 | 8 | |
sockaddr_in(3) |
HSP 変数 | メンバ | |||
---|---|---|---|---|
メンバ名 | オフセット | サイズ | ||
sockaddr_in6(0) | 下位ワード | sin6_family | 0 | 2 |
上位ワード | sin6_port | 2 | 2 | |
sockaddr_in6(1) | sin6_flowinfo | 4 | 4 | |
sockaddr_in6(2) | sin6_addr | 8 | 16 | |
sockaddr_in6(3) | ||||
sockaddr_in6(4) | ||||
sockaddr_in6(5) | ||||
sockaddr_in6(6) | sin6_scope_id | 24 | 8 | |
sockaddr_in6(7) |