sockaddr

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)