IPV6_PKTINFO ソケット オプション
IPV6_PKTINFO ソケット オプションを使用すると、アプリケーションは IPv6 ソケットの LPFN_WSARECVMSG (WSARecvMsg) 関数によるパケット情報の返しを有効または無効にすることができます。
このソケット オプションの状態を照会するには、 getsockopt 関数を呼び出します。 このオプションを設定するには、次のパラメーターを指定して setsockopt 関数を呼び出します。
ソケット オプションの値
このソケット オプションを表す定数は 19 です。
構文
int getsockopt(
(SOCKET) s, // descriptor identifying a socket
(int) IPPROTO_IPV6, // level
(int) IPV6_PKTINFO, // optname
(char *) optval, // output buffer,
(int) optlen, // size of output buffer
);
int setsockopt(
(SOCKET) s, // descriptor identifying a socket
(int) IPPROTO_IPV6, // level
(int) IPV6_PKTINFO, // optname
(char *) optval, // input buffer,
(int) optlen, // size of input buffer
);
パラメーター
-
s [in]
-
ソケットを識別する記述子。
-
level [in]
-
オプションが定義されているレベル。 この操作 にはIPPROTO_IPV6 を使用します。
-
optname [in]
-
値を取得または設定するソケット オプション。 この操作にはIPV6_PKTINFOを使用します。
-
optval [out]
-
設定するオプションの値を含むバッファーへのポインター。 このパラメーターは、 DWORD 値のサイズ以上のバッファーを指す必要があります。
この値はブール値として扱われ、FALSE (無効) を 示すために 0 が使用され、 TRUE (有効) を示す 0 以外の値が使用されます。
-
optlen [in, out]
-
optval バッファーのサイズ (バイト単位) へのポインター。 このサイズは 、DWORD 値のサイズ以上である必要があります。
戻り値
操作が正常に完了すると、 getsockopt または setsockopt 関数は 0 を返します。
操作が失敗した場合は、SOCKET_ERRORの値が返され、 WSAGetLastError を呼び出すことによって特定のエラー コードを取得できます。
エラー コード | 意味 |
---|---|
この関数を使用する前に 、WSAStartup 呼び出しが正常に行われる必要があります。 |
|
ネットワーク サブシステムが失敗しました。 |
|
optval パラメーターまたは optlen パラメーターの 1 つは、ユーザー アドレス空間の有効な部分にないメモリを指します。
optlen パラメーターが指す値が DWORD 値のサイズより小さい場合も、このエラーが返されます。 |
|
ブロックしている Windows ソケット 1.1 呼び出しが進行中であるか、サービス プロバイダーがコールバック関数を処理しています。 |
|
無効な引数が指定されました。 このエラーは、 level パラメーターが不明または無効な場合に返されます。 Windows Vista 以降では、ソケットが移行状態の場合にもこのエラーが返されます。 |
|
オプションが不明であるか、指定されたプロトコル ファミリでサポートされていません。 このエラーは、 パラメーターで渡されたソケット記述子の型パラメーターがSOCK_DGRAMまたはSOCK_RAWされていない場合に返されます。 |
|
記述子はソケットではありません。 |
解説
IPV6_PKTINFO ソケット オプションを指定して呼び出される getsockopt 関数を使用すると、アプリケーションは IPv6 ソケットの LPFN_WSARECVMSG (WSARecvMsg) 関数によってパケット情報が返されるかどうかを判断できます。
IPV6_PKTINFO ソケット オプションで呼び出される setsockopt 関数を使用すると、アプリケーションは 、LPFN_WSARECVMSG (WSARecvMsg) 関数によるパケット情報の返しを有効または無効にすることができます。 ソケットのIPV6_PKTINFO オプションは、既定では無効 ( FALSE に設定) されています。
このソケット・オプションがSOCK_DGRAMタイプまたはSOCK_RAWの IPv6 ソケットで使用可能になっている場合、LPFN_WSARECVMSG (WSARecvMsg) 関数は lpMsg パラメーターが指す WSAMSG 構造体のパケット情報を戻します。 返される WSAMSG 構造体の制御データ・オブジェクトの 1 つに、受信パケット・アドレス情報の保管に使用される in6_pktinfo 構造体が含まれます。
IPv6 経由でLPFN_WSARECVMSG (WSARecvMsg) 関数によって受信されたデータグラムの場合、受信した WSAMSG 構造体の Control メンバーには、WSACMSGHDR 構造体を含む WSABUF 構造体が含まれます。 この WSACMSGHDR 構造体のcmsg_levelメンバーにはIPPROTO_IPV6が含まれます。この構造体のcmsg_typeメンバーにはIPV6_PKTINFOが含まれます。cmsg_data メンバーには、受信した IPv6 パケット アドレス情報を格納するために使用されるin6_pktinfo構造体が含まれます。 in6_pktinfo構造体の IPv6 アドレスは、パケットの受信元の IPv6 アドレスです。
デュアル スタック データグラム ソケットの場合、アプリケーションで IPv4 経由で受信したデータグラムの WSAMSG 構造体でパケット情報を返すLPFN_WSARECVMSG (WSARecvMsg) 関数が必要な場合は、ソケットで IP_PKTINFO ソケット オプションを true に設定する必要があります。 ソケットで IPV6_PKTINFO オプションのみが true に設定されている場合、IPv6 経由で受信したデータグラムに対してパケット情報が提供されますが、IPv4 経由で受信したデータグラムには提供されない可能性があります。
Ws2ipdef.h ヘッダー ファイルは Ws2tcpip.h に自動的に含まれるので、直接使用しないでください。
必要条件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows XP [デスクトップ アプリのみ] |
サポートされている最小のサーバー |
Windows Server 2003 [デスクトップ アプリのみ] |
Header |
|
関連項目