IPPROTO_IPV6 ソケット オプション

次の 表IPPROTO_IPV6、 IPv6 アドレス ファミリ (AF_INET6) 用に作成されたソケットに適用されるソケット オプションについて説明します。 ソケット オプションの取得と設定の詳細については、 getsockopt および setsockopt 関数のリファレンス ページを参照してください。

プロトコルを列挙し、インストールされている各プロトコルでサポートされているプロパティを検出するには、 WSAEnumProtocolsWSCEnumProtocols、または WSCEnumProtocols32 関数を使用します。

一部のソケット オプションでは、これらのテーブルが伝えることができる以上の説明が必要です。このようなオプションには、追加情報へのリンクが含まれています。

オプション

オプション get set Optval 型 説明
IP_ORIGINAL_ARRIVAL_IF はい はい DWORD (ブール値) LPFN_WSARECVMSG (WSARecvMsg) 関数が、データグラム ソケットのパケットを受信した元の到着インターフェイスを含むオプションの制御データを返す必要があるかどうかを示します。 このオプションは、IPv6 ホストが IP4 ネットワークを経由して他の IPv6 ネットワークに到達する必要がある場合に、ユニキャスト IPv6 トラフィックのアドレス割り当てとホスト間自動トンネリングを提供する IPv6 移行テクノロジ (6to4、ISATAP、Teredo トンネルなど) で使用されます。 IPv6 パケットは、IPv4 パケットとしてトンネリングされて送信されます。 このオプションを使用すると、パケットが受信された元の IPv4 インターフェイスを WSAMSG 構造体で返すことができます。
IPV6_ADD_IFLIST はい DWORD (IF_INDEX) IP_IFLIST オプションに関連付けられている IFLIST にインターフェイス インデックスを追加します。
IPV6_ADD_MEMBERSHIP はい ipv6_mreq 指定したインターフェイス上の指定されたマルチキャスト グループにソケットを参加させます。 このオプションは、データグラムソケットと生ソケットでのみ有効です(ソケットの種類はSOCK_DGRAMまたはSOCK_RAWである必要があります)。
IPV6_DEL_IFLIST はい DWORD (IF_INDEX) IP_IFLIST オプションに関連付けられている IFLIST からインターフェイス インデックスを削除します。 エントリはアプリケーションによってのみ削除できるため、インターフェイスが削除されるとエントリが古くなる可能性があることに注意してください。
IPV6_DROP_MEMBERSHIP はい ipv6_mreq 指定したインターフェイスから指定されたマルチキャスト グループをそのままにします。 このオプションは、データグラムソケットと生ソケットでのみ有効です(ソケットの種類はSOCK_DGRAMまたはSOCK_RAWである必要があります)。
IPV6_GET_IFLIST はい DWORD[] (IF_INDEX[]) IP_IFLIST オプションに関連付けられている現在の IFLIST を取得します。 IP_IFLISTが有効になっていない場合はエラーを返します。
IPV6_HDRINCL はい はい DWORD(boolean) アプリケーションがすべての送信データに IPv6 ヘッダーを提供したことを示します。 setsockopt の呼び出しで optval パラメーターが 1 に設定されている場合、オプションは有効になります。 optval0 に設定されている場合、オプションは無効になります。 既定値は、無効です。 このオプションは、データグラムソケットと生ソケットでのみ有効です (ソケットの種類はSOCK_DGRAMまたはSOCK_RAWである必要があります)。 SOCK_RAWをサポートする TCP/IP サービス プロバイダーも、IPV6_HDRINCLをサポートする必要があります。
IPV6_HOPLIMIT はい はい DWORD (ブール値) LPFN_WSARECVMSG (WSARecvMsg) 関数でホップ (TTL) 情報を返す必要があることを示します。 setsockopt の呼び出しで optval1 に設定されている場合、オプションは有効になります。 0 に設定すると、オプションは無効になります。 このオプションは、データグラムソケットと生ソケットでのみ有効です (ソケットの種類はSOCK_DGRAMまたはSOCK_RAWである必要があります)。
IPV6_IFLIST はい はい DWORD (ブール値) ソケットの IP_IFLIST 状態を取得または設定します。 このオプションを true に設定すると、データグラム受信は IFLIST 内のインターフェイスに制限されます。 他のインターフェイスで受信したデータグラムは無視されます。 IFLIST は空で始まります。 IFLIST を編集するには、IP_ADD_IFLISTとIP_DEL_IFLISTを使用します。
IPV6_JOIN_GROUP はい ipv6_mreq IPV6_ADD_MEMBERSHIPと同じ
IPV6_LEAVE_GROUP はい ipv6_mreq IPV6_DROP_MEMBERSHIPと同じ
IPV6_MTU はい DWORD パス MTU のシステムの見積もりを取得します。 ソケットを接続する必要があります。
IPV6_MTU_DISCOVER はい はい DWORD (PMTUD_STATE) ソケットのパス MTU 検出状態を取得または設定します。 既定値は IP_PMTUDISC_NOT_SET です。 ストリーム ソケットの場合、 IP_PMTUDISC_NOT_SETIP_PMTUDISC_DO はパス MTU 検出を実行します。 IP_PMTUDISC_DONTIP_PMTUDISC_PROBE はパス MTU 検出をオフにします。 データグラム ソケットの場合、 を IP_PMTUDISC_DO に設定すると、パス MTU より大きいパケットを送信しようとすると、エラーが発生します。 IP_PMTUDISC_DONTに設定すると、パケットはインターフェイス MTU に従って断片化されます。 IP_PMTUDISC_PROBEに設定すると、インターフェイス MTU より大きいパケットを送信しようとすると、エラーが発生します。
IPV6_MULTICAST_HOPS はい はい DWORD ソケット上の IPv6 マルチキャスト トラフィックに関連付けられている TTL 値を取得または設定します。 TTL を 255 より大きい値に設定することは無効です。 このオプションは、データグラムソケットと生ソケットでのみ有効です (ソケットの種類はSOCK_DGRAMまたはSOCK_RAWである必要があります)。
IPV6_MULTICAST_IF はい はい DWORD IPv6 マルチキャスト トラフィックを送信するための送信インターフェイスを取得または設定します。 このオプションでは、IPv6 マルチキャスト トラフィックを受信するための既定のインターフェイスは変更されません。 このオプションは、マルチホーム コンピューターの場合に重要です。 このオプションを設定するための入力値は、ホストのバイト順で目的の送信インターフェイスの 4 バイト インターフェイス インデックスです。 GetAdaptersAddresses 関数を使用して、インターフェイス インデックス情報を取得できます。 setsockopt の呼び出し時に optvalNULL に設定されている場合は、既定の IPv6 インターフェイスが使用されます。 optval が 0 の場合、マルチキャスト トラフィックを送信するために、マルチキャストを受信するための既定のインターフェイスが指定されます。 このオプションを取得すると、 optval はマルチキャスト IPv6 トラフィックをホストのバイト順で送信するための現在の既定のインターフェイス インデックスを返します。
IPV6_MULTICAST_LOOP はい はい DWORD (ブール値) ソケットで送信されたマルチキャスト データが、宛先マルチキャスト グループでも参加している場合、ソケット受信バッファーにエコーされることを示します。 setsockopt の呼び出しで optval1 に設定されている場合、オプションは有効になります。 0 に設定すると、オプションは無効になります。 このオプションは、データグラムソケットと生ソケットでのみ有効です (ソケットの種類はSOCK_DGRAMまたはSOCK_RAWである必要があります)。
IPV6_PKTINFO はい はい DWORD (ブール値) LPFN_WSARECVMSG (WSARecvMsg) 関数によってパケット情報を返す必要があることを示します。
IPV6_PROTECTION_LEVEL はい はい INT 同じリンク ローカルまたはサイト ローカル プレフィックスを持つアドレスなど、指定したスコープへのソケットの制限を有効にします。 さまざまな制限レベルと既定の設定を提供します。 詳細については、「 IPV6_PROTECTION_LEVEL 」を参照してください。
IPV6_RECVIF はい はい DWORD (ブール値) データグラム ソケットを使用してパケットを受信したインターフェイスの詳細を、IP スタックがコントロール バッファーに設定する必要があるかどうかを示します。 この値が true の場合、 LPFN_WSARECVMSG (WSARecvMsg) 関数は、データグラム ソケットに対してパケットが受信されたインターフェイスを含むオプションの制御データを返します。 このオプションを使用すると、パケットが受信された IPv6 インターフェイスを WSAMSG 構造体で返すことができます。 このオプションは、データグラムソケットと生ソケットでのみ有効です (ソケットの種類はSOCK_DGRAMまたはSOCK_RAWである必要があります)。
IPV6_RECVTCLASS はい はい DWORD (ブール値) IP スタックが、受信したデータグラムの Traffic Class IPv6 ヘッダー フィールドを含むメッセージを制御バッファーに設定する必要があるかどうかを示します。 この値が true の場合、 LPFN_WSARECVMSG (WSARecvMsg) 関数は、受信したデータグラムの Traffic Class IPv6 ヘッダー フィールド値を含むオプションの制御データを返します。 このオプションを使用すると、受信したデータグラムのトラフィック クラス IPv6 ヘッダー フィールドを WSAMSG 構造体で返すことができます。 返されるメッセージの種類はIPV6_TCLASS。 トラフィック クラス フィールドのすべての DSCP ビットと ECN ビットが返されます。 このオプションは、データグラム ソケットでのみ有効です (ソケットの種類はSOCK_DGRAMする必要があります)。
IPV6_UNICAST_HOPS はい はい DWORD ユニキャスト トラフィックの IPv6 ソケットに関連付けられている現在の TTL 値を取得または設定します。 TTL を 255 より大きい値に設定することは無効です。
IPV6_UNICAST_IF はい はい DWORD (IF_INDEX) IPv6 トラフィックを送信するための送信インターフェイスを取得または設定します。 このオプションでは、IPv6 トラフィックを受信するための既定のインターフェイスは変更されません。 このオプションは、マルチホーム コンピューターの場合に重要です。 このオプションを設定するための入力値は、ホストのバイト順で目的の送信インターフェイスの 4 バイト インターフェイス インデックスです。 GetAdaptersAddresses 関数を使用して、インターフェイス インデックス情報を取得できます。 optval が 0 の場合、IPv6 トラフィックを送信するための既定のインターフェイスは未指定に設定されます。 このオプションを取得すると、 optval は、ホストのバイト順で IPv6 トラフィックを送信するための現在の既定のインターフェイス インデックスを返します。
IPV6_USER_MTU はい はい DWORD 指定されたソケットの IP 層 MTU の上限 (バイト単位) を取得または設定します。 値がシステムのパス MTU の推定値 ( IPV6_MTU ソケット オプションのクエリを実行して接続されたソケットで取得できる) よりも大きい場合、オプションは無効になります。 値が小さい場合、これより大きい送信パケットは断片化されるか、 IPV6_DONTFRAGの値に応じて送信に失敗します。 既定値は IP_UNSPECIFIED_USER_MTU (MAXULONG) です。 タイプ セーフの場合は、ソケット オプションを直接使用する代わりに、 WSAGetIPUserMtu 関数と WSASetIPUserMtu 関数を使用する必要があります。
IPV6_V6ONLY はい はい DWORD (ブール値) AF_INET6 アドレス ファミリ用に作成されたソケットが IPv6 通信のみに制限されるかどうかを示します。 AF_INET6 アドレス ファミリ用に作成されたソケットは、IPv6 通信と IPv4 通信の両方に使用できます。 アプリケーションによっては、AF_INET6 アドレス ファミリ用に作成されたソケットの使用を IPv6 通信のみに制限する必要があります。 この値が 0 以外の場合 (Windows では既定値)、AF_INET6 アドレス ファミリ用に作成されたソケットは、IPv6 パケットの送受信にのみ使用できます。 この値がゼロの場合、AF_INET6 アドレス ファミリ用に作成されたソケットは、IPv6 アドレスまたは IPv4 アドレスとのパケットの送受信に使用できます。 IPv4 アドレスとやり取りできるようにするには、IPv4 でマップされたアドレスを使用する必要があります。 このソケット オプションは、Windows Vista 以降でサポートされています。

IPPROTO_IPV6 ソケット オプションの Windows サポート

オプション Windows 8 Windows Server 2012 Windows 7 Windows Server 2008 Windows Vista
IP_ORIGINAL_ARRIVAL_IF x x x
IPV6_ADD_IFLIST Windows 10 バージョン 1803 以降
IPV6_ADD_MEMBERSHIP x x x x x
IPV6_DEL_IFLIST Windows 10 バージョン 1803 以降
IPV6_DROP_MEMBERSHIP x x x x x
IPV6_GET_IFLIST Windows 10 バージョン 1803 以降
IPV6_HDRINCL x x x x x
IPV6_HOPLIMIT x x x x x
IPV6_IFLIST Windows 10 バージョン 1803 以降
IPV6_JOIN_GROUP x x x x x
IPV6_LEAVE_GROUP x x x x x
IPV6_MULTICAST_HOPS x x x x x
IPV6_MULTICAST_IF x x x x x
IPV6_MULTICAST_LOOP x x x x x
IPV6_PKTINFO x x x x x
IPV6_PROTECTION_LEVEL x x x x x
IPV6_RECVIF x x x x x
IPV6_UNICAST_HOPS x x x x x
IPV6_UNICAST_IF x x x x x
IPV6_V6ONLY x x x x x

オプション Windows Server 2003 Windows XP
IP_ORIGINAL_ARRIVAL_IF
IPV6_ADD_IFLIST
IPV6_ADD_MEMBERSHIP x x
IPV6_DEL_IFLIST
IPV6_DROP_MEMBERSHIP x x
IPV6_GET_IFLIST
IPV6_HDRINCL x x
IPV6_HOPLIMIT x x
IPV6_IFLIST
IPV6_JOIN_GROUP x x
IPV6_LEAVE_GROUP x x
IPV6_MULTICAST_HOPS x x
IPV6_MULTICAST_IF x x
IPV6_MULTICAST_LOOP x x
IPV6_PKTINFO x x
IPV6_PROTECTION_LEVEL x x
IPV6_RECVIF
IPV6_UNICAST_HOPS x x
IPV6_UNICAST_IF
IPV6_V6ONLY

解説

Windows Vista 以降用にリリースされた Microsoft Windows ソフトウェア開発キット (SDK) では、ヘッダー ファイルのorganizationが変更され、IPPROTO_IPV6 レベルは、Winsock2.h ヘッダー ファイルに自動的に含まれる Ws2def.h ヘッダー ファイルで定義されています。 IPPROTO_IPV6 ソケット オプションは、Ws2tcpip.h ヘッダー ファイルに自動的に含まれる Ws2ipdef.h ヘッダー ファイルで定義されます。 Ws2def.h ヘッダー ファイルと Ws2ipdef.h ヘッダー ファイルを直接使用しないでください。

IP_ORIGINAL_ARRIVAL_IF ソケット オプションは、Windows Server 2008 R2 と Windows 7 でサポートされています。

要件

要件
ヘッダー
Ws2def.h (Winsock2.h を含む);
Windows Server 2003 および Windows XP の Winsock2.h