このセクションでは、Windows オペレーティング システムのさまざまなエディションの Winsock Socket の入出力コントロール (IOCTL) について説明します。 WSAIoctl または WSPIoctl 関数を使用して Winsock IOCTL を発行し、ソケット、トランスポート プロトコル、または通信サブシステムのモードを制御します。
一部の Winsock IOCTL では、この表で説明できる以上の説明が必要です。このようなオプションには、追加のトピックへのリンクが含まれています。
現在定義されている ioctlsocket オペコードを保持するエンコード スキームを採用すると同時に、 dwIoControlCode パラメーターが 32 ビット エンティティである限り、オペコード識別子領域をパーティション分割する便利な方法を提供できます。 dwIoControlCode パラメーターは、Windows Sockets 1.1 および Unix コントロール コードとの下位互換性を維持しながら、新しいコントロール コードを追加するときにプロトコルとベンダーの独立を可能にするために構築されています。 dwIoControlCode パラメーターの形式は次のとおりです。
私 | O | V | T | ベンダー/住所ファミリ | コード |
---|---|---|---|---|---|
3 | 3 | 2 | 2 2 | 2 2 2 2 2 2 2 1 1 1 1 | 1 1 1 1 1 1 |
1 | 0 | 9 | 8 7 | 6 5 4 3 2 1 0 9 8 7 6 | 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 |
注
テーブルに表示される dwIoControlCode パラメーターのビットは、列ごとに上から下に垂直方向に読み取る必要があります。 そのため、左端のビットはビット 31、次のビットはビット 30、右端のビットはビット 0 です。
IOC_INと同様に、入力バッファーがコードに対して有効かどうかが設定 されます。
O は、IOC_OUTと同様に、出力バッファーがコードに対して有効な場合 に設定されます。 入力バッファーと出力バッファーの両方を使用する制御コードは、I と O の両方を設定します。
IOC_VOIDと同様に、コードのパラメーターがない場合は V が設定 されます。
T は、IOCTL の型を定義する 2 ビット数量です。 次の値が定義されています。
0 IOCTL は、 FIONREAD および FIONBIO と同様に、標準の Unix IOCTL コードです。
1 IOCTL は、汎用の Windows ソケット 2 IOCTL コードです。 Windows ソケット 2 に対して定義された新しい IOCTL コードには、T == 1 が含まれます。
2 IOCTL は、特定のアドレス ファミリにのみ適用されます。
3 IOCTL は、 IOC_VENDORと同様に、特定のベンダーのプロバイダーにのみ適用されます。 この種類では、会社に仕入先 /住所ファミリ パラメーターに表示される仕入先番号を割り当てることができます。 その後、ベンダーは、クリアリングハウスに IOCTL を登録しなくても、そのベンダーに固有の新しい IOCTL を定義できるため、ベンダーの柔軟性とプライバシーが提供されます。
ベンダー/アドレス ファミリ コードを所有するベンダーを定義する 11 ビット数量 (T == 3 の場合) またはコードが適用されるアドレス ファミリを含む 11 ビット数量 (T == 2 の場合)。 これが Unix IOCTL コード (T == 0) の場合、このパラメーターの値は Unix 上のコードと同じです。 これが汎用 Windows ソケット 2 IOCTL (T == 1) の場合、このパラメーターをコード パラメーターの拡張として使用して、追加のコード値を指定できます。
コード 操作の特定の IOCTL コードを含む 16 ビット数量。
Unix IOCTL コード
次の Unix IOCTL コード (コマンド) がサポートされています。
FIONBIO
ソケット で非ブロッキング モードを有効または無効にします。 lpvInBuffer パラメーターは、符号なし long (QoS) を指します。非ブロッキング モードを有効にする場合は 0 以外、無効にする場合は 0 です。 ソケットが作成されると、ブロック モードで動作します (つまり、非ブロッキング モードは無効になります)。 これは BSD ソケットと一致します。
WSAAsyncSelect ルーチンまたは WSAEventSelect ルーチンは、ソケットを非ブロッキング モードに自動的に設定します。 WSAAsyncSelect または WSAEventSelect がソケットで発行されている場合、WSAIoctl を使用してソケットをブロッキング モードに戻そうとすると、WSAEINVAL で失敗します。 ソケットをブロッキング モードに戻すには、アプリケーションで最初に WSAAsyncSelect を無効にし、lEvent パラメーターが 0 の WSAAsyncSelect を呼び出すか、または WSAEventSelect を呼び出して WSAEventSelect を無効にし、lNetworkEvents パラメーターを 0 に設定する必要があります。
FIONREAD
ソケットからアトミックに読み取ることができるデータの量 を決定します。 lpvOutBuffer パラメーターは、WSAIoctl が結果を格納する符号なし long を指します。
s パラメーターで渡されたソケットがストリーム指向の場合 (例: SOCK_STREAM型)、FIONREAD は 1 回の受信操作で読み取ることができるデータの総量を返します。これは通常、ソケットでキューに格納されているデータの総量と同じです (データ ストリームはバイト指向であるため、これは保証されません)。
s パラメーターで渡されたソケットがメッセージ指向 (例: SOCK_DGRAM 型) の場合、FIONREAD は、ソケットでキューに入れられた最初のデータグラム (メッセージ) のサイズではなく、読み取り可能なバイトの合計数を報告します。
SIOCATMARK
すべての OOB データが読み取られたかどうかを判断します。 これは、OOB データ (SO_OOBINLINE) のインライン受信用に構成されたストリーム スタイル (SOCK_STREAM 型など) のソケットにのみ適用されます。 OOB データが読み取りを待機していない場合、操作は TRUE を返します。 それ以外の場合は FALSE が返され、ソケットで次に実行される受信操作では、マークの前にあるデータの一部またはすべてを取得します。アプリケーションは 、SIOCATMARK 操作を使用して、残っているかどうかを判断する必要があります。 緊急 (帯域外) データの前に通常のデータがある場合は、順番に受信されます。 ( recv 操作では、同じ呼び出しで OOB と通常のデータが混在することはありません。 lpvOutBuffer は 、 WSAIoctl が結果を格納する BOOL を指します。
Windows ソケット 2 のコマンド
次の Windows ソケット 2 コマンドがサポートされています。
SIO_ACQUIRE_PORT_RESERVATION (オペコード設定: I、T==3)
TCP または UDP ポートのブロックのランタイム予約を要求します。 ランタイム ポート予約の場合、ポート プールでは、予約が許可されたソケット上のプロセスから予約を使用する必要があります。 ランタイム ポート予約は、 SIO_ACQUIRE_PORT_RESERVATION IOCTL が呼び出されたソケットの有効期間に限り続きます。 これに対し、 CreatePersistentTcpPortReservation または CreatePersistentUdpPortReservation 関数を使用して作成された永続的なポート予約は、永続的な予約を取得する機能を持つ任意のプロセスで使用できます。
詳細については、 SIO_ACQUIRE_PORT_RESERVATION リファレンスを参照してください。
SIO_ACQUIRE_PORT_RESERVATION は、Windows Vista 以降のバージョンのオペレーティング システムでサポートされています。
SIO_ADDRESS_LIST_CHANGE (オペコード設定: V、T==1)
アプリケーションがバインドできるソケットのプロトコル ファミリのローカル トランスポート アドレスの一覧の変更の通知を受け取ります。 この IOCTL の完了後、出力情報は提供されません。入力候補は、使用可能なローカル アドレスの一覧が変更されたことを示すだけで、 SIO_ADDRESS_LIST_QUERYを使用して再度クエリを実行する必要があります。
アプリケーションでは、重複した I/O を使用して 、要求の 完了によって変更が通知SIO_ADDRESS_LIST_CHANGE想定されます (必須ではありません)。 または、 SIO_ADDRESS_LIST_CHANGE IOCTL が非ブロッキング ソケットで発行され、重複するパラメーター (lpOverlapped/ lpCompletionRoutine が NULL に設定されていない場合は、エラー WSAEWOULDBLOCK ですぐに完了します。 その後、アプリケーションは、WSAEventSelect または WSAAsyncSelect を呼び出し、ネットワーク イベント ビットマスクに FD_ADDRESS_LIST_CHANGE ビットを設定することで、アドレス一覧の変更イベントを待機できます。
SIO_ADDRESS_LIST_QUERY (オペコード設定: O、T==1)
アプリケーションがバインドできるソケットのプロトコル ファミリのローカル トランスポート アドレスの一覧を取得します。 アドレスの一覧はアドレス ファミリによって異なり、一部のアドレスはリストから除外されます。
注
Windows プラグ アンド プレイ環境では、アドレスを動的に追加および削除できます。 そのため、アプリケーションは、永続的な SIO_ADDRESS_LIST_QUERYによって返 される情報に依存することはできません。 アプリケーションは、重複した I/O またはFD_ADDRESS_LIST_CHANGE イベントを介して通知を提供する SIO_ADDRESS_LIST_CHANGE IOCTL を介してアドレス変更通知に登録できます。 次の一連のアクションを使用して、アプリケーションが常に現在のアドレス一覧情報を持っていることを保証できます。
- IOCTL SIO_ADDRESS_LIST_CHANGE 問題
- IOCTL SIO_ADDRESS_LIST_QUERY 問題
- SIO_ADDRESS_LIST_CHANGE IOCTL がアドレス一覧の変更 (重複した I/O またはFD_ADDRESS_LIST_CHANGE イベントの通知) をアプリケーションに通知するたびに、アクションのシーケンス全体を繰り返す必要があります。
詳細については、 SIO_ADDRESS_LIST_QUERY リファレンスを参照してください。 SIO_ADDRESS_LIST_QUERY は Windows 2000 以降でサポートされています。
SIO_APPLY_TRANSPORT_SETTING (オペコード設定: I,T==3)
トランスポート設定をソケットに適用します。 適用されるトランスポート設定は、lpvInBuffer パラメーターで渡されるTRANSPORT_SETTING_IDに基づいています。
現在定義されているトランスポート設定は、TCP ソケットの REAL_TIME_NOTIFICATION_CAPABILITY 機能のみです。
渡されたTRANSPORT_SETTING_IDに Guid メンバーがREAL_TIME_NOTIFICATION_CAPABILITYに設定されている場合、これは、Windows ストア アプリでバックグラウンド ネットワーク通知を受信するために ControlChannelTrigger で使用される TCP ソケットにリアルタイム通知設定を適用する要求です。
詳細については、 SIO_APPLY_TRANSPORT_SETTING リファレンスを参照してください。 SIO_APPLY_TRANSPORT_SETTING は、Windows 8、Windows Server 2012 以降でサポートされています。
SIO_ASSOCIATE_HANDLE (オペコード設定: I,T==1)
このソケットをコンパニオン インターフェイスの指定されたハンドルに関連付けます。 入力バッファーには、コンパニオン インターフェイスのマニフェスト定数 (TH_NETDEVやTH_TAPIなど) に対応する整数値と、指定したコンパニオン インターフェイスのハンドルである値、およびその他の必要な情報が含まれます。 特定のコンパニオン インターフェイスに固有の詳細については、 Winsock Annexes の適切なセクションを参照してください。 合計サイズは、入力バッファーの長さに反映されます。 出力バッファーは必要ありません。 WSAENOPROTOOPT エラー コードは、この IOCTL をサポートしていないサービス プロバイダーに対して示されます。 この IOCTL によって関連付けられているハンドルは、 SIO_TRANSLATE_HANDLEを使用して取得できます。
たとえば、特定のプロバイダーが (1) ソケットの動作に対して多くの追加制御を提供し、(2) コントロールがプロバイダー固有であり、既存の Windows ソケット関数や将来定義される可能性がある機能に対応していない場合など、コンパニオン インターフェイスが使用される可能性があります。 ソケットでサポートされる可能性のある他のインターフェイスを検出して追跡するには、この IOCTL の代わりにコンポーネント オブジェクト モデル (COM) を使用することをお勧めします。 この IOCTL は、COM が使用できない、または何らかの理由で使用できないシステムとの (逆の) 互換性のために存在します。
SIO_ASSOCIATE_PORT_RESERVATION (オペコード設定: I,T==3)
ポート予約トークンによって識別される TCP または UDP ポートのブロックに対して、ソケットを永続予約またはランタイム予約に関連付けます。 ソケットがバインドされる前に 、SIO_ASSOCIATE_PORT_RESERVATION IOCTL を発行する必要があります。 ソケットがバインドされている場合、それに割り当てられたポートは、指定されたトークンによって識別されるポート予約から選択されます。 指定された予約から使用可能なポートがない場合、 バインド 関数の呼び出しは失敗します。
詳細については、 SIO_ASSOCIATE_PORT_RESERVATION リファレンスを参照してください。
SIO_ASSOCIATE_PORT_RESERVATION は、Windows Vista 以降のバージョンのオペレーティング システムでサポートされています。
SIO_BASE_HANDLE (オペコード設定: O、T==1)
特定のソケットの基本サービス プロバイダー ハンドルを取得します。 戻り値は SOCKET です。
戻り値は基本サービス プロバイダーのソケット ハンドルである必要があるため、階層化サービス プロバイダーはこの IOCTL をインターセプトしません。
出力バッファーがソケット ハンドルに対して十分な大きさでない場合 ( cbOutBuffer が SOCKET のサイズより小さい場合)、または lpvOutBuffer パラメーターが NULL ポインターである場合、 SOCKET_ERROR はこの IOCTL の結果として返され、 WSAGetLastError は WSAEFAULT を返します。
SIO_BASE_HANDLE は Mswsock.h ヘッダー ファイルで定義され、Windows Vista 以降でサポートされています。
SIO_BSP_HANDLE (オペコード設定: O、T==1)
WSASendMsg 関数によって使用されるソケットの基本サービス プロバイダー ハンドルを取得します。 戻り値は SOCKET です。
この Ioctl は、プロバイダーが WSASendMsg 関数を確実にインターセプトするために、階層化されたサービス プロバイダーによって使用されます。
出力バッファーがソケット ハンドルに対して十分な大きさでない場合 ( cbOutBuffer が SOCKET のサイズより小さい場合)、または lpvOutBuffer パラメーターが NULL ポインターである場合、 SOCKET_ERROR はこの IOCTL の結果として返され、 WSAGetLastError は WSAEFAULT を返します。
SIO_BSP_HANDLE は Mswsock.h ヘッダー ファイルで定義され、Windows Vista 以降でサポートされています。
SIO_BSP_HANDLE_SELECT (オペコード設定: O、T==1)
select 関数によって使用されるソケットの基本サービス プロバイダー ハンドルを取得します。 戻り値は SOCKET です。
この Ioctl は、プロバイダーが select 関数を確実にインターセプトするために、階層化されたサービス プロバイダーによって使用されます。
出力バッファーがソケット ハンドルに対して十分な大きさでない場合 ( cbOutBuffer が SOCKET のサイズより小さい場合)、または lpvOutBuffer パラメーターが NULL ポインターである場合、 SOCKET_ERROR はこの IOCTL の結果として返され、 WSAGetLastError は WSAEFAULT を返します。
SIO_BSP_HANDLE_SELECT は Mswsock.h ヘッダー ファイルで定義され、Windows Vista 以降でサポートされています。
SIO_BSP_HANDLE_POLL (オペコード設定: O、T==1)
WSAPoll 関数で使用されるソケットの基本サービス プロバイダー ハンドルを取得します。 lpOverlapped パラメーターは NULL ポインターである必要があります。 戻り値は SOCKET です。
この Ioctl は、プロバイダーが WSAPoll 関数を確実にインターセプトするために、階層化されたサービス プロバイダーによって使用されます。
出力バッファーがソケット ハンドルに対して十分な大きさでない場合 ( cbOutBuffer が SOCKET のサイズより小さい場合)、 lpvOutBuffer パラメーターが NULL ポインターであるか、 lpOverlapped パラメーターが NULL ポインターでない場合、 SOCKET_ERROR はこの IOCTL の結果として返され、 WSAGetLastError は WSAEFAULT を返します。
SIO_BSP_HANDLE_POLL は Mswsock.h ヘッダー ファイルで定義され、Windows Vista 以降でサポートされています。
SIO_CHK_QOS (オペコード設定: I、O、T==3)
QoS トラフィック特性に関する情報を取得します。 フロー設定と RESV メッセージの受信の間の送信システムの移行フェーズ中 (遷移フェーズの詳細については 、RSVP サービスが TC を呼び出す方法 を参照)、RSVP フローに関連付けられているトラフィックはサービスの種類 (ベスト エフォート、 制御された負荷、または 保証済み) に基づいて形成されます。 詳細については、「プラットフォーム SDK のサービス品質」セクションの「SIO_CHK_QOSの使用」を参照してください。
SIO_CPU_AFFINITY (オペコード設定: I、T==3)
ポート共有と受信表示の並列化を有効にします。 アプリケーションでこのソケット オプションを使用してソケットを異なるプロセッサに関連付け、ソケットを同じアドレスにバインドすると、受信インジケーターは、Receive Side Scaling (RSS) ハッシュに基づいてソケット全体に分散されます。 RSS 設定は変更されないため、特定のフロー (ローカル エンドポイント、リモート エンドポイント ペア) は常に同じプロセッサ上に示されます。 その結果、特定のフローに属するすべてのパケットが同じソケットに示されます。 この IOCTL はバインド前に呼び出す必要があります。それ以外の場合は WSAEINVAL が返されます。 入力バッファーは、USHORT 型のプロセッサ インデックス (0 から始まる) です。 IOCTL は、SO_REUSEADDRおよびSO_REUSE_MULTICASTPORTと互換性がありません。 UDP ソケットでのみサポートされます。
注
Windows SDK のバージョン 10.0.19041.0 (Windows 10 バージョン 2004) を対象としている場合は、名前SIO_CPU_AFFINITYの代わりに0x98000015
値を使用します。
SIO_ENABLE_CIRCULAR_QUEUEING (オペコード設定: V、T==1)
バッファー キューのオーバーフローのために新しく到着したメッセージを削除しないように、基になるメッセージ指向サービス プロバイダーに示します。 代わりに、新しく到着したメッセージに対応するために、キュー内の最も古いメッセージを削除する必要があります。 入力バッファーと出力バッファーは必要ありません。 この IOCTL は、信頼性の低いメッセージ指向プロトコルに関連付けられているソケットに対してのみ有効であることに注意してください。 WSAENOPROTOOPT エラー コードは、この IOCTL をサポートしていないサービス プロバイダーに対して示されます。
SIO_FIND_ROUTE (オペコード設定: O、T==1)
この IOCTL を発行すると、入力バッファー内の sockaddr として指定されたリモート アドレスへのルートを検出するように要求します。 アドレスがローカル キャッシュに既に存在する場合、そのエントリは無効になります。 Novell の IPX の場合、この呼び出しは IPX GetLocalTarget (GLT) を開始します。この呼び出しは、指定されたリモート アドレスのネットワークに対してクエリを実行します。
SIO_FLUSH (オペコード設定: V、T==1)
このソケットに関連付けられている送信側キューの現在の内容を破棄します。 入力バッファーと出力バッファーは必要ありません。 WSAENOPROTOOPT エラー コードは、この IOCTL をサポートしていないサービス プロバイダーに対して示されます。
SIO_GET_BROADCAST_ADDRESS (オペコード設定: O、T==1)
この IOCTL は、sendto/ WSASendTo で使用するのに適したブロードキャスト アドレスを含む sockaddr 構造体を出力バッファーに格納します。 この IOCTL は IPv6 ソケットではサポートされておらず、 WSAENOPROTOOPT エラー コードを返します。
SIO_GET_EXTENSION_FUNCTION_POINTER (オペコード設定: O、I、T==1)
関連付けられているサービス プロバイダーでサポートされている、指定された拡張関数へのポインターを取得します。 入力バッファーには、対象の拡張関数を識別する値を持つグローバル一意識別子 (GUID) が含まれています。 目的の関数へのポインターが出力バッファーに返されます。 拡張関数識別子は、サービス プロバイダー ベンダーによって確立され、拡張機能の機能とセマンティクスについて説明するベンダードキュメントに含める必要があります。
Windows TCP/IP サービス プロバイダーでサポートされる拡張関数の GUID 値は、 Mswsock.h ヘッダー ファイルで定義されています。 これらの GUID に使用できる値は次のとおりです。
任期 | 説明 |
---|---|
WSAID_ACCEPTEX |
AcceptEx 拡張関数。 |
WSAID_CONNECTEX |
ConnectEx 拡張関数。 |
WSAID_DISCONNECTEX |
DisconnectEx 拡張関数。 |
WSAID_GETACCEPTEXSOCKADDRS |
GetAcceptExSockaddrs 拡張関数。 |
WSAID_TRANSMITFILE |
TransmitFile 拡張関数。 |
WSAID_TRANSMITPACKETS |
TransmitPackets 拡張関数。 |
WSAID_WSARECVMSG |
LPFN_WSARECVMSG (WSARecvMsg) 拡張関数。 |
WSAID_WSASENDMSG |
WSASendMsg 拡張関数。 |
SIO_GET_GROUP_QOS (オペコード設定: O、I、T==1)
ソケットでの将来の使用のために予約されています。
このソケットが属するソケット グループに関連付けられている QOS 構造体を取得します。 入力バッファーは省略可能です。 一部のプロトコル (RSVP など) では、入力バッファーを使用してサービス品質要求を修飾できます。 QOS 構造体は出力バッファーにコピーされます。 このソケットが適切なソケット グループに属していない場合、返される QOS 構造体の SendingFlowspec メンバーと ReceivingFlowspec メンバーは NULL に設定されます。 WSAENOPROTOOPT エラー コードは、サービスの品質をサポートしていないサービス プロバイダーに対して示されます。
SIO_GET_INTERFACE_LIST (オペコード設定: O、T==0)
構成済みの IP インターフェイスとそのパラメーターの一覧を 、INTERFACE_INFO 構造体の配列として返します。
注
Windows ソケット 2 に準拠している TCP/IP サービス プロバイダーでは、このコマンドのサポートが必須です。
lpvOutBuffer パラメーターは、インターフェイスに関する情報をインターフェイス上のユニキャスト IP アドレスのINTERFACE_INFO構造体の配列として格納するバッファーを指します。 cbOutBuffer パラメーターは、出力バッファーの長さを指定します。 返されるインターフェイスの数 ( lpvOutBuffer パラメーターによって指されるバッファーで返される構造体の数) は、 lpcbBytesReturned パラメーターで返される出力バッファーの実際の長さに基づいて決定できます。
WSAIoctl 関数が SIO_GET_INTERFACE_LIST で呼び出され、ソケット s パラメーターのレベル メンバーがIPPROTO_IPとして定義されていない場合、WSAEINVAL が返されます。 出力バッファーの長さを指定する cbOutBuffer パラメーターが小さすぎる場合、SIO_GET_INTERFACE_LISTを使用して WSAIoctl 関数を呼び出すと、WSAEFAULT が返され、構成済みのインターフェイスの一覧を受信します。
SIO_GET_INTERFACE_LIST は、Windows Me/98 および Windows NT 4.0 SP4 以降でサポートされています。
SIO_GET_INTERFACE_LIST_EX (オペコード設定: O、T==0)
ソケットでの将来の使用のために予約されています。
構成された IP インターフェイスとそのパラメーターの一覧を 、INTERFACE_INFO_EX 構造体の配列として返します。
lpvOutBuffer パラメーターは、インターフェイスに関する情報をインターフェイス上のユニキャスト IP アドレスのINTERFACE_INFO_EX構造体の配列として格納するバッファーを指します。 cbOutBuffer パラメーターは、出力バッファーの長さを指定します。 返されるインターフェイスの数 ( lpvOutBuffer で返される構造体の数) は、 lpcbBytesReturned パラメーターで返される出力バッファーの実際の長さに基づいて決定できます。
SIO_GET_INTERFACE_LIST_EX は現在、Windows ではサポートされていません。
SIO_GET_QOS (オペコード設定: O、T==1)
ソケットでの将来の使用のために予約されています。 ソケットに関連付けられている QOS 構造体を取得します。 入力バッファーは省略可能です。 一部のプロトコル (RSVP など) では、入力バッファーを使用してサービス品質要求を修飾できます。 QOS 構造体は出力バッファーにコピーされます。 出力バッファーは、完全な QOS 構造を含めるのに十分な大きさにする必要があります。 WSAENOPROTOOPT エラー コードは、サービスの品質をサポートしていないサービス プロバイダーに対して示されます。
送信側は、ソケットが接続されるまで SIO_GET_QOS を呼び出さない場合があります。
受信側は、バインドされるとすぐに SIO_GET_QOS を呼び出す場合があります。
SIO_GET_TX_TIMESTAMP
送信 (TX) パケットのタイムスタンプを取得するために使用されるソケット IOCTL。 データグラム ソケットに対してのみ有効です。
SIO_GET_TX_TIMESTAMP制御コードは、ソケットの送信タイムスタンプ キューから送信タイムスタンプを削除します。 SIO_TIMESTAMPING ソケット IOCTL を使用して、最初にタイムスタンプ受信 を 有効にします。 次に、 WSAIoctl (または WSPIoctl) 関数を次のパラメーターで呼び出して、ID によって tx タイムスタンプを取得します。
SIO_GET_TX_TIMESTAMPの場合、入力は UINT32 タイムスタンプ ID で、出力は UINT64 タイムスタンプ値です。 成功すると、tx タイムスタンプが使用可能になり、返されます。 使用可能な送信タイムスタンプがない場合、 WSAGetLastError は WSAEWOULDBLOCK を返します。
注
UDP_SEND_MSG_SIZE経由で合体送信を行う場合、TX タイムスタンプはサポートされません。
Winsock のタイムスタンプも参照してください。
SIO_IDEAL_SEND_BACKLOG_CHANGE (オペコード設定: V、T==0)
基になる接続の理想的な送信バックログ (ISB) 値が変更されたときにアプリケーションに通知します。
Windows ソケットを使用して TCP 接続経由でデータを送信する場合は、最高のスループットを実現するために、TCP で十分な量のデータを未処理 (送信済みでまだ確認されていません) にしておくことが重要です。 TCP 接続に最適なスループットを実現するために未処理のデータ量の理想的な値は、理想的な送信バックログ (ISB) サイズと呼ばれます。 ISB 値は、TCP 接続と受信側のアドバタイズされた受信ウィンドウ (一部はネットワーク内の輻輳の量) の帯域幅遅延積の関数です。
接続ごとの ISB 値は、Windows Server 2008、Windows Vista SP1、およびそれ以降のバージョンのオペレーティング システムの TCP プロトコル実装から使用できます。 SIO_IDEAL_SEND_BACKLOG_CHANGE IOCTL は、ISB 値が接続に対して動的に変化したときに通知を受け取るために、アプリケーションで使用できます。
詳細については、 SIO_IDEAL_SEND_BACKLOG_CHANGE リファレンスを参照してください。
SIO_IDEAL_SEND_BACKLOG_CHANGE は、Windows Server 2008、Windows Vista SP1 以降のバージョンのオペレーティング システムでサポートされています。
SIO_IDEAL_SEND_BACKLOG_QUERY (オペコード設定: O、T==0)
基になる接続の理想的な送信バックログ (ISB) 値を取得します。
Windows ソケットを使用して TCP 接続経由でデータを送信する場合は、最高のスループットを実現するために、TCP で十分な量のデータを未処理 (送信済みでまだ確認されていません) にしておくことが重要です。 TCP 接続に最適なスループットを実現するために未処理のデータ量の理想的な値は、理想的な送信バックログ (ISB) サイズと呼ばれます。 ISB 値は、TCP 接続と受信側のアドバタイズされた受信ウィンドウ (一部はネットワーク内の輻輳の量) の帯域幅遅延積の関数です。
接続ごとの ISB 値は、Windows Server 2008 以降の TCP プロトコル実装から使用できます。 SIO_IDEAL_SEND_BACKLOG_QUERY IOCTL は、アプリケーションが接続の ISB 値を照会するために使用できます。
詳細については、 SIO_IDEAL_SEND_BACKLOG_QUERY リファレンスを参照してください。
SIO_IDEAL_SEND_BACKLOG_QUERY は、Windows Server 2008、Windows Vista SP1 以降のバージョンのオペレーティング システムでサポートされています。
SIO_KEEPALIVE_VALS (オペコード設定: I,T==3)
TCP キープアライブ タイムアウトと間隔を指定する TCP キープアライブ オプションの接続ごとの設定を有効または無効にします。 キープアライブ オプションの詳細については、IETF Web サイトで利用可能な RFC 1122 で指定されているインターネット ホストの要件に関するセクション 4.2.3.6 を参照してください。 (このリソースは英語でのみ使用できます)。
SIO_KEEPALIVE_VALS を使用して、キープアライブ プローブを有効または無効にし、キープアライブのタイムアウトと間隔を設定できます。 キープアライブ タイムアウトは、最初のキープアライブ パケットが送信されるまで、アクティビティなしでタイムアウトをミリ秒単位で指定します。 キープアライブ間隔は、受信確認が受信されない場合に連続するキープアライブ パケットが送信されるまでの間隔をミリ秒単位で指定します。
SOL_SOCKET ソケット オプションの 1 つである SO_KEEPALIVE オプションを使用して、接続で TCP キープアライブを有効または無効にしたり、このオプションの現在の状態を照会したりすることもできます。 ソケットで TCP キープアライブが有効になっているかどうかをクエリするには、SO_KEEPALIVE オプションを使用して getsockopt 関数を呼び出すことができます。 TCP キープアライブを有効または無効にするには、SO_KEEPALIVE オプションを使用して setsockopt 関数を呼び出すことができます。 SO_KEEPALIVEで TCP キープアライブが有効になっている場合、これらの値が SIO_KEEPALIVE_VALS を使用して変更されていない限り、既定の TCP 設定はキープアライブ タイムアウトと間隔に使用されます。
詳細については、 SIO_KEEPALIVE_VALS リファレンスを参照してください。 SIO_KEEPALIVE_VALS は Windows 2000 以降でサポートされています。
SIO_LOOPBACK_FAST_PATH (オペコード設定: I,T==3)
TCP ソケットを構成して、ループバック インターフェイスの待機時間を短縮し、操作を高速化します。 この IOCTL は、TCP/IP スタックがこのソケットでのループバック操作に特別な高速パスを使用することを要求します。 SIO_LOOPBACK_FAST_PATH IOCTL は TCP ソケットでのみ使用できます。 この IOCTL は、ループバック セッションの両側で使用する必要があります。 TCP ループバック の高速パスは、IPv4 または IPv6 ループバック インターフェイスを使用してサポートされます。 既定では、SIO_LOOPBACK_FAST_PATH は無効になっています。
詳細については、 SIO_LOOPBACK_FAST_PATH リファレンスを参照してください。 SIO_LOOPBACK_FAST_PATH は、Windows 8、Windows Server 2012 以降でサポートされています。
SIO_MULTIPOINT_LOOPBACK (オペコード設定: V、T==1)
マルチキャスト セッション内のローカル コンピューター (必ずしも同じソケット) 上のアプリケーションによって送信されたデータを、ループバック インターフェイス上のマルチキャスト宛先グループに参加しているソケットが受信するかどうかを制御します。 値が TRUE の場合、ローカル コンピューター上のアプリケーションによって送信されたマルチキャスト データは、ループバック インターフェイス上のリッスン ソケットに配信されます。 FALSE の値を指定すると、ローカル コンピューター上のアプリケーションから送信されたマルチキャスト データがループバック インターフェイス上のリッスン ソケットに配信されなくなります。 既定では、 SIO_MULTIPOINT_LOOPBACK が有効になっています。
SIO_MULTICAST_SCOPE (オペコード設定: I,T==1)
マルチキャスト転送を行うスコープを指定します。 スコープは、対象となるルーティング ネットワーク セグメントの数として定義されます。 スコープが 0 の場合、マルチキャスト伝送はネットワーク上に配置されず、ローカル ホスト内のソケット間で配布される可能性があることを示します。 スコープ値が 1 (既定値) の場合は、伝送がネットワーク上に配置されますが、ルーターを通過しないことを示します。 スコープ値が大きいほど、交差できるルーターの数が決まります。 これは、IP マルチキャストの Time to Live (TTL) パラメーターに対応することに注意してください。 既定では、スコープは 1 です。
SIO_QUERY_RSS_PROCESSOR_INFO (オペコード設定: O、T==1)
ソケットと RSS プロセッサ コアと NUMA ノードの間の関連付けを照会します。
SIO_QUERY_RSS_PROCESSOR_INFO IOCTL は、PROCESSOR_NUMBERと NUMA ノード ID を含むSOCKET_PROCESSOR_AFFINITY構造体を返します。 返される PROCESSOR_NUMBER 構造体には、グループ番号と、グループ内の相対プロセッサ番号が含まれます。
詳細については、 SIO_QUERY_RSS_PROCESSOR_INFO リファレンスを参照してください。 SIO_QUERY_RSS_PROCESSOR_INFO は、Windows 8、Windows Server 2012 以降でサポートされています。
SIO_QUERY_RSS_SCALABILITY_INFO (オペコード設定: O、T==3)
クエリは、受信側スケーリング (RSS) 機能のインターフェイスをオフロードします。 SIO_QUERY_RSS_SCALABILITY_INFOに対して返される引数構造体は、Mstcpip.h ヘッダー ファイルで定義されているRSS_SCALABILITY_INFO構造体で指定されます。 この構造体は次のように定義されます。
// Scalability info for the transport
typedef struct _RSS_SCALABILITY_INFO {
BOOLEAN RssEnabled;
} RSS_SCALABILITY_INFO, *PRSS_SCALABILITY_INFO;
RssEnabled メンバーで返される値は、RSS が少なくとも 1 つのインターフェイスで有効になっているかどうかを示します。
出力バッファーが RSS_SCALABILITY_INFO 構造体に対して十分な大きさでない場合 ( cbOutBuffer が RSS_SCALABILITY_INFOのサイズより小さい場合)、 または lpvOutBuffer パラメーターが NULL ポインターである場合、 SOCKET_ERROR はこの IOCTL の結果として返され、 WSAGetLastError は WSAEINVAL を返します。
1 つのシステム内に複数の CPU が存在する高速ネットワークでは、NDIS 5.1 以前のバージョンのアーキテクチャではプロトコル処理を 1 つの CPU に制限するため、マルチ CPU システム上で適切にスケーリングするネットワーク プロトコル スタックの機能は抑制されます。 受信側スケーリング (RSS) は、ネットワーク アダプターからのネットワーク負荷を複数の CPU 間で分散できるようにすることで、この問題を解決します。
SIO_QUERY_RSS_SCALABILITY_INFO は Windows Vista 以降でサポートされています。
SIO_QUERY_TRANSPORT_SETTING (オペコード設定: I,T==3)
ソケットのトランスポート設定に対してクエリを実行します。 照会されるトランスポート設定は、lpvInBuffer パラメーターで渡されたTRANSPORT_SETTING_IDに基づいています。
現在定義されているトランスポート設定は、TCP ソケットの REAL_TIME_NOTIFICATION_CAPABILITY 機能のみです。
TRANSPORT_SETTING_IDに Guid メンバーが REAL_TIME_NOTIFICATION_CAPABILITY に設定されている場合、これは、ControlChannelTrigger で使用される TCP ソケットのリアルタイム通知設定を照会して、Windows ストア アプリでバックグラウンド ネットワーク通知を受信する要求です。 WSAIoctl または WSPIoctl 呼び出しが成功した場合、この IOCTL は現在の状態のREAL_TIME_NOTIFICATION_SETTING_OUTPUT構造体を返します。
詳細については、 SIO_QUERY_TRANSPORT_SETTING リファレンスを参照してください。 SIO_QUERY_TRANSPORT_SETTING は、Windows 8、Windows Server 2012 以降でサポートされています。
SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE (オペコード設定: O、T==3)
アプリケーション層強制 (ALE) エンドポイント ハンドルに対してクエリを実行します。
Windows フィルタリング プラットフォーム (WFP) では、ネットワーク トラフィックの検査と変更がサポートされています。 Windows Vista では、WFP では、ホスト コンピューターが通信エンドポイントであるシナリオに重点を置いています。 ただし、Windows Server 2008 には、WFP プラットフォームを利用してパススルー トラフィックを検査およびプロキシするエッジ ファイアウォールの実装があります。 インターネット セキュリティと高速化 (ISA) サーバーは、このようなエッジ デバイスの例です。
既存のエンドポイントに関連付けられている送信パスに受信パケットを挿入する機能が必要なファイアウォール シナリオがいくつかあります。 宛先エンドポイントに関連付けられているトランスポート層エンドポイント ハンドルを検出するメカニズムが必要です。 エンドポイントを作成したアプリケーションは、これらのトランスポート層エンドポイントを所有しています。 この IOCTL は、レイヤー エンドポイント ハンドル マッピングをトランスポートするためのソケット ハンドルを提供するために使用されます。
出力バッファーがエンドポイント ハンドルに対して十分な大きさでない場合 ( cbOutBuffer が UINT64 のサイズより小さい場合)、 または lpvOutBuffer パラメーターが NULL ポインターである場合、 SOCKET_ERROR はこの IOCTL の結果として返され、 WSAGetLastError は WSAEINVAL を返します。
SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE は Windows Vista 以降でサポートされています。
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT (オペコード設定: I,T==3)
Windows フィルタリング プラットフォーム (WFP) リダイレクト サービスによって使用されるリダイレクト レコードのリダイレクト コンテキストを照会します。
SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL は、リダイレクトされたソケット接続でプロキシ接続追跡を提供するために使用されます。 この WFP 機能は、接続の最初のリダイレクトから宛先への最終的な接続へのリダイレクト レコードの追跡を容易にします。
詳細については、 SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT リファレンスを参照してください。 SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT は、Windows 8、Windows Server 2012 以降でサポートされています。
SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS (オペコード設定: I,T==3)
Windows フィルタリング プラットフォーム (WFP) リダイレクト サービスで使用するために、受け入れられた TCP/IP 接続のリダイレクト レコードを照会します。
SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS IOCTL は、リダイレクトされたソケット接続でプロキシ接続追跡を提供するために使用されます。 この WFP 機能は、接続の最初のリダイレクトから宛先への最終的な接続へのリダイレクト レコードの追跡を容易にします。
詳細については、 SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS リファレンスを参照してください。 SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS は、Windows 8、Windows Server 2012 以降でサポートされています。
SIO_RCVALL (オペコード設定: I,T==3)
ソケットがネットワーク インターフェイスを通過するすべての IPv4 または IPv6 パケットを受信できるようにします。 WSAIoctl 関数に渡されるソケット ハンドルは、次のいずれかである必要があります。
- アドレス ファミリを AF_INET に設定し、ソケットの種類を SOCK_RAW に設定し、プロトコルを IPPROTO_IP に設定して作成された IPv4 ソケット。
- アドレス ファミリを AF_INET6 に設定し、ソケットの種類を SOCK_RAW に設定し、プロトコルを IPPROTO_IPV6 に設定して作成された IPv6 ソケット。
ソケットは、明示的なローカル IPv4 または IPv6 インターフェイスにもバインドする必要があります。つまり、 INADDR_ANY または in6addr_anyにバインドすることはできません。
Windows Server 2008 以前では、 SIO_RCVALL IOCTL 設定では、ネットワーク インターフェイスから送信されたローカル パケットはキャプチャされません。 これには、別のインターフェイスで受信し、 SIO_RCVALL IOCTL に指定されたネットワーク インターフェイスを転送したパケットが含まれていました。
Windows 7 および Windows Server 2008 R2 では、ネットワーク インターフェイスから送信されたローカル パケットもキャプチャされるように変更されました。 これには、別のインターフェイスで受信した後、IOCTL を使用してソケットにバインドされたネットワーク インターフェイス SIO_RCVALL 転送されたパケットが含まれます。
この IOCTL を設定するには、ローカル コンピューターの管理者特権が必要です。
この機能は、無差別モードと呼ばれることもあります。
SIO_RCVALL IOCTL オプションに指定できる値は、Mstcpip.h ヘッダー ファイルで定義されているRCVALL_VALUE列挙で指定されます。 SIO_RCVALLに使用できる値は次のとおりです。
任期 | 説明 |
---|---|
RCVALL_OFF |
ソケットがネットワーク上のすべての IPv4 または IPv6 パケットを受信しないように、このオプションを無効にします。 |
RCVALL_ON |
ソケットがネットワーク上のすべての IPv4 または IPv6 パケットを受信するように、このオプションを有効にします。 NIC が無差別モードをサポートしている場合、このオプションはネットワーク インターフェイス カード (NIC) で無差別モードを有効にします。 ネットワーク ハブがある LAN セグメントでは、無差別モードをサポートする NIC は、同じ LAN セグメント上の他のコンピューター間のトラフィックを含め、LAN 上のすべての IPv4 または IPv6 トラフィックをキャプチャします。 キャプチャされたすべてのパケット (ソケットに応じて IPv4 または IPv6) が生ソケットに配信されます。 このオプションでは、インターフェイス上の他のパケット (ARP、IPX、NetBEUI パケットなど) はキャプチャされません。 Netmon はネットワーク インターフェイスに同じモードを使用しますが、このオプションを使用してトラフィックをキャプチャすることはありません。 |
RCVALL_SOCKETLEVELONLY |
この機能は現在実装されていないため、このオプションを設定しても影響はありません。 |
RCVALL_IPLEVEL |
IPv4 または IPv6 ソケットがネットワーク上の IP レベルですべてのパケットを受信するように、このオプションを有効にします。 このオプションでは、ネットワーク インターフェイス カードで無差別モードは有効になりません。 このオプションは、IP レベルでのパケット処理にのみ影響します。 NIC は、構成済みのユニキャスト アドレスとマルチキャスト アドレスに送信されたパケットのみを受信します。 ただし、このオプションが有効になっているソケットは、特定の IP アドレスに送信されるパケットだけでなく、NIC が受信するすべての IPv4 または IPv6 パケットを受信します。 このオプションでは、インターフェイスで受信した他のパケット (ARP、IPX、NetBEUI パケットなど) はキャプチャされません。 |
詳細については、 SIO_RCVALL リファレンスを参照してください。
SIO_RCVALL は Windows 2000 以降でサポートされています。
SIO_RCVALL_IGMPMCAST (オペコード設定: I,T==3)
ソケットが、他のマルチキャスト IP トラフィックを受信することなく、ネットワーク上のすべての IGMP マルチキャスト IP トラフィックを受信できるようにします。 WSAIoctl 関数に渡されるソケット ハンドルは、AF_INETアドレス ファミリ、SOCK_RAWソケットの種類、およびIPPROTO_IGMPプロトコルである必要があります。 ソケットも明示的なローカル インターフェイスにバインドする必要があります。つまり、INADDR_ANYにバインドすることはできません。
ソケットがバインドされ、IOCTL が設定されると、 WSARecv 関数または recv 関数を呼び出すと、指定されたインターフェイスを通過するマルチキャスト IP データグラムが返されます。 十分に大きなバッファーを指定する必要があることに注意してください。 この IOCTL を設定するには、ローカル コンピューターの管理者特権が必要です。
SIO_RCVALL_IGMPMCAST は Windows 2000 以降でサポートされています。
SIO_RCVALL_MCAST (オペコード設定: I,T==3)
ソケットがネットワーク上のすべてのマルチキャスト IP トラフィック (つまり、224.0.0.0 から 239.255.255.255 の範囲の IP アドレス宛てのすべての IP パケット) を受信できるようにします。 WSAIoctl 関数に渡されるソケット ハンドルは、AF_INET アドレス ファミリ、SOCK_RAW ソケットの種類、およびIPPROTO_UDPプロトコルである必要があります。 ソケットは明示的なローカル インターフェイスにもバインドする必要があります。つまり、INADDR_ANYにバインドすることはできません。 ソケットはポート 0 にバインドする必要があります。
ソケットがバインドされ、IOCTL が設定されると、 WSARecv 関数または recv 関数を呼び出すと、指定されたインターフェイスを通過するマルチキャスト IP データグラムが返されます。 十分に大きなバッファーを指定する必要があることに注意してください。 この IOCTL を設定するには、ローカル コンピューターの管理者特権が必要です。
SIO_RCVALL_MCAST は Windows 2000 以降でサポートされています。
SIO_RELEASE_PORT_RESERVATION (オペコード設定: I,T==3)
TCP または UDP ポートのブロックのランタイム予約を解放します。 解放するランタイム予約は、 SIO_ACQUIRE_PORT_RESERVATION IOCTL を使用して発行プロセスから取得されている必要があります。
詳細については、 SIO_RELEASE_PORT_RESERVATION リファレンスを参照してください。
SIO_RELEASE_PORT_RESERVATION は、Windows Vista 以降のバージョンのオペレーティング システムでサポートされています。
SIO_ROUTING_INTERFACE_CHANGE (オペコード設定: I,T==1)
入力バッファー ( sockaddr 構造体として指定) 内のリモート アドレスに到達するために使用するルーティング インターフェイスの変更の通知を受け取ります。 この IOCTL が完了すると、新しいルーティング インターフェイスに関する出力情報は提供されません。完了は、特定の宛先のルーティング インターフェイスが変更され、 SIO_ROUTING_INTERFACE_QUERY IOCTL を使用してクエリを実行する必要があることを示すだけです。
要求の完了を通じてルーティング インターフェイスの変更を通知するために、アプリケーションは重複した I/O を 使用SIO_ROUTING_INTERFACE_CHANGE前提としています。 または、lpOverlapped パラメーターと lpCompletionRoutine パラメーターが NULL に設定された非ブロッキング ソケットで SIO_ROUTING_INTERFACE_CHANGE IOCTL が発行された場合、エラーとしてすぐに戻り、WSAEWOULDBLOCK が完了し、アプリケーションは WSAEventSelect または WSAAsyncSelect への呼び出しを介して変更イベントのルーティングを待機し、ネットワーク イベント ビットマスクにFD_ROUTING_INTERFACE_CHANGEビットを設定できます。
ほとんどの場合、ルーティング情報は安定しているため、アプリケーションが関心のあるすべての宛先に関する通知を取得するために複数の未処理の IOCTL を保持する必要があるだけでなく、サービス プロバイダーにこれらの通知要求を追跡してもらうと、大量のシステム リソースが使用されます。 この状況を回避するには、入力パラメーターの意味を拡張し、サービス プロバイダーの要件を次のように緩和します。
- アプリケーションは、プロトコル ファミリ固有のワイルドカード アドレス (使用可能なアドレスへのバインドを要求するときに バインド 呼び出しで使用されるアドレスと同じ) を指定して、ルーティング変更の通知を要求できます。 これにより、アプリケーションは、すべてのソケットと宛先に対して未処理 のSIO_ROUTING_INTERFACE_CHANGE を 1 つだけ保持し、 SIO_ROUTING_INTERFACE_QUERY を使用して実際のルーティング情報を取得できます。
- サービス プロバイダーには、SIO_ROUTING_INTERFACE_CHANGEの入力バッファーでアプリケーションによって指定された 情報 (アプリケーション がワイルドカード アドレスを指定した場合と同様) を無視し、ルーティング情報が変更された場合 (入力バッファーで指定された宛先へのルートだけでなく) SIO_ROUTING_INTERFACE_CHANGE IOCTL またはシグナル FD_ROUTING_INTERFACE_CHANGE イベントを完了するオプションがあります。
SIO_ROUTING_INTERFACE_QUERY (オペコード設定: I、O、T==1)
( sockaddr 構造体として表される) ローカル インターフェイスのアドレスを取得するには、入力バッファーで指定されたリモート アドレス ( sockaddr として) に送信するために使用する必要があります。 リモート マルチキャスト アドレスは、マルチキャスト転送用の優先インターフェイスのアドレスを取得するために、入力バッファーに送信できます。 いずれの場合も、返されるインターフェイス アドレスは、後続の bind() 要求でアプリケーションによって使用される可能性があります。
ルートは変更される可能性があることに注意してください。 そのため、アプリケーションは、永続的な SIO_ROUTING_INTERFACE_QUERYによって返 される情報に依存することはできません。 アプリケーションは、重複した I/O またはFD_ROUTING_INTERFACE_CHANGE イベントを介して通知を提供する SIO_ROUTING_INTERFACE_CHANGE IOCTL を介して変更通知をルーティングするために登録できます。 次の一連のアクションを使用して、アプリケーションが特定の宛先の現在のルーティング インターフェイス情報を常に持っていることを保証できます。
- IOCTL SIO_ROUTING_INTERFACE_CHANGE 問題
- IOCTL SIO_ROUTING_INTERFACE_QUERY 問題
- SIO_ROUTING_INTERFACE_CHANGE IOCTL がルーティング変更をアプリケーションに通知するたびに (重複した I/O を介して、またはFD_ROUTING_INTERFACE_CHANGEイベントを通知することによって)、アクションのシーケンス全体を繰り返す必要があります。
出力バッファーがインターフェイス アドレスを格納するのに十分な大きさでない場合は、この IOCTL の結果としてSOCKET_ERRORが返され、 WSAGetLastError は WSAEFAULT を返します。 この場合、出力バッファーの必要なサイズは lpcbBytesReturned で返されます。 lpvInBuffer、lpvOutBuffer、または lpcbBytesReturned パラメーターがユーザー アドレス空間の有効な部分に完全に含まれていない場合も、WSAEFAULT エラー コードが返されることに注意してください。
入力バッファーで指定された宛先アドレスに使用可能なインターフェイスを介して到達できない場合は、この IOCTL の結果としてSOCKET_ERRORが返され、 WSAGetLastError は WSAENETUNREACH 、またはすべてのネットワーク接続が失われた場合は WSAENETDOWN を返します。
SIO_SET_COMPATIBILITY_MODE (オペコード設定: I,T==3)
ネットワーク スタックが特定の動作を処理する方法を要求します。この動作の既定の処理方法は、Windows のバージョンによって異なる場合があります。 SIO_SET_COMPATIBILITY_MODEの引数構造体は、Mswsockdef.h ヘッダー ファイルで定義されているWSA_COMPATIBILITY_MODE構造体で指定されます。 この構造体は次のように定義されます。
/* Argument structure for SIO_SET_COMPATIBILITY_MODE */
typedef struct _WSA_COMPATIBILITY_MODE {
WSA_COMPATIBILITY_BEHAVIOR_ID BehaviorId;
ULONG TargetOsVersion;
} WSA_COMPATIBILITY_MODE, *PWSA_COMPATIBILITY_MODE;
BehaviorId メンバーで指定された値は、要求された動作を示します。 TargetOsVersion メンバーで指定された値は、動作が要求されている Windows のバージョンを示します。
BehaviorId メンバーには、Mswsockdef.h ヘッダー ファイルで定義されているWSA_COMPATIBILITY_BEHAVIOR_ID列挙型の値のいずれかを指定できます。 BehaviorId メンバーに指定できる値は次のとおりです。
任期 | 説明 |
---|---|
WsaBehaviorAll |
これは、 WSA_COMPATIBILITY_BEHAVIOR_IDに定義されているすべての互換性のある動作を要求することと同じです。 |
WsaBehaviorReceiveBuffering |
TargetOsVersion メンバーが Windows Vista 以降の値に設定されている場合、TCP 接続が確立された後でも、SO_RCVBUF ソケット オプションを使用して、このソケットの TCP 受信バッファー サイズの縮小が許可されます。 TargetOsVersion メンバーが Windows Vista より前の値に設定されている場合、接続の確立後、SO_RCVBUF ソケット オプションを使用して、このソケットの TCP 受信バッファー サイズを縮小することはできません。 |
WsaBehaviorAutoTuning |
TargetOsVersion メンバーが Windows Vista 以降の値に設定されている場合、受信ウィンドウの自動チューニングが有効になり、TCP ウィンドウのスケール ファクターが既定値の 8 から 2 に減少します。 TargetOsVersion が Windows Vista より前の値に設定されている場合、受信ウィンドウの自動チューニングは無効になります。 TCP ウィンドウのスケーリング オプションも無効になっており、実際の受信ウィンドウの最大サイズは 65,535 バイトに制限されています。 接続が確立される前に 65,535 バイトを超える値を指定して、このソケットで SO_RCVBUF ソケット オプションが呼び出された場合でも、TCP ウィンドウ スケーリング オプションは接続でネゴシエートできません。 |
詳細については、 SIO_SET_COMPATIBILITY_MODE リファレンスを参照してください。
SIO_SET_COMPATIBILITY_MODE は、Windows Vista 以降でサポートされています。
SIO_SET_GROUP_QOS (オペコード設定: I,T==1)
予約済み。
SIO_SET_PRIORITY_HINT (オペコード設定: I,T==3)
このソケット上のトラフィックを特定の優先順位で処理するためのヒントを基になるトランスポート プロトコルに提供します。 lpvInBuffer は、cbInBuffer が sizeof(PRIORITY_HINT) に設定されたPRIORITY_HINT型の変数を指す必要があります。 lpvOutBuffer パラメーターと cbOutBuffer パラメーターはそれぞれ NULL と 0 である必要があります。 Microsoft Windows TCP 実装では、Windows 10 バージョン 1809 (10.0; 以降) でこの IOCTL がサポートされています。ビルド 17763) 以降: 要求された優先度の値が IoPriorityHintVeryLow に設定されている場合、TCP は変更されたバージョンの LEDBAT アルゴリズム (RFC 6817 で定義) を使用してソケットの送信トラフィック レートを制御します。 受信トラフィックは、この IOCTL の影響を受けません。 LEDBAT はスカベンジャー アルゴリズムであり、その目的は、通常の優先順位のトラフィックが存在する場合に邪魔にならないようにすることで、待機時間を短くし、通常の優先順位のトラフィックに悪影響を及ぼさないようにすることです。
RFC 6817 も参照してください。
SIO_SET_PRIORITY_HINT は、Windows 10 バージョン 1809 (10.0;ビルド 17763) 以降。
SIO_SET_QOS (オペコード設定: I,T==1)
指定した QOS 構造体をソケットに関連付けます。 出力バッファーは必要ありません。 QOS 構造体は入力バッファーから取得されます。 WSAENOPROTOOPT エラー コードは、サービスの品質をサポートしていないサービス プロバイダーに対して示されます。
SIO_TCP_INITIAL_RTO (オペコード設定: I,T==3)
初期再送信タイムアウト (RTO) パラメーターを構成して、TCP ソケットの初期 (SYN/SYN+ACK) 再送信特性を制御します。 構成パラメーターは、 TCP_INITIAL_RTO_PARAMETERS 構造体で指定されます。
詳細については、 SIO_TCP_INITIAL_RTO リファレンスを参照してください。 SIO_TCP_INITIAL_RTO は、Windows 8、Windows Server 2012 以降でサポートされています。
SIO_TIMESTAMPING
ソケット送信/受信タイムスタンプの受信を構成するために使用されるソケット IOCTL。 データグラム ソケットに対してのみ有効です。 SIO_TIMESTAMPINGの入力の種類は、TIMESTAMPING_CONFIG構造体です。
Winsock のタイムスタンプも参照してください。
SIO_TRANSLATE_HANDLE (オペコード設定: I、O、T==1)
コンパニオン インターフェイスのコンテキストで有効なソケット s の対応するハンドルを取得するには (たとえば、TH_NETDEVとTH_TAPI)。 コンパニオン インターフェイスとその他の必要なパラメーターを識別するマニフェスト定数は、入力バッファーで指定されます。 この関数が完了すると、対応するハンドルが出力バッファーで使用できるようになります。 特定のコンパニオン インターフェイスに固有の詳細については、 Winsock Annexes の適切なセクションを参照してください。 WSAENOPROTOOPT エラー コードは、指定されたコンパニオン インターフェイスに対してこの IOCTL をサポートしていないサービス プロバイダーに対して示されます。 この IOCTL は、 SIO_TRANSLATE_HANDLEを使用して関連付けられているハンドルを取得します。
ソケットでサポートされる可能性のある他のインターフェイスを検出して追跡するには、この IOCTL の代わりにコンポーネント オブジェクト モデル (COM) を使用することをお勧めします。 この IOCTL は、COM が使用できない、または何らかの理由で使用できないシステムとの下位互換性のために存在します。
SIO_UDP_CONNRESET (オペコード設定: I,T==3)
Windows XP: UDP PORT_UNREACHABLE メッセージを報告するかどうかを制御します。 レポートを有効にするには 、TRUE に設定します。 レポートを無効にするには FALSE に設定します。
SIO_UDP_NETRESET
NET_UNREACHABLE (TTL 期限切れ) メッセージが recv/WSARecv/etc を介して UDP ソケットで報告されるかどうかを制御します。有効にするには、入力バッファーに TRUE を渡します (サポートされている場合は既定値)。 FALSE を渡してレポートを無効にします。
SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS (オペコード設定: I,T==3)
Windows フィルタリング プラットフォーム (WFP) リダイレクト サービスで使用する最終的な宛先への接続に使用される新しい TCP ソケットにリダイレクト レコードを設定します。
SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL は、リダイレクトされたソケット接続のプロキシ接続追跡の一部として使用されます。 この WFP 機能は、接続の最初のリダイレクトから宛先への最終的な接続へのリダイレクト レコードの追跡を容易にします。
詳細については、 SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS リファレンスを参照してください。 SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS は、Windows 8、Windows Server 2012 以降でサポートされています。
SIO_TCP_INFO (オペコード設定: I、O、T==3)
ソケットの TCP 統計を取得します。 TCP 統計は、 TCP_INFO_v0 構造で提供されます。
GetPerTcpConnectionEStats 関数を使用して TCP 統計を取得する場合とは異なり、この制御コードを使用して TCP 統計を取得する場合、ユーザー コードで TCP 接続テーブルを読み込み、格納、フィルター処理する必要はありません。また、使用するために昇格された特権は必要ありません。
詳細については、 SIO_TCP_INFOを参照してください。 SIO_TCP_INFO は、Windows 10 バージョン 1703、Windows Server 2016 以降でサポートされています。
注釈
Winsock Ioctl は、さまざまなヘッダー ファイルで定義されています。 これには、 Winsock2.h、 Mswsock.h、 Mstcpip.h ヘッダー ファイルが含まれます。
Windows Vista 以降用にリリースされた Microsoft Windows ソフトウェア開発キット (SDK) では、ヘッダー ファイルの編成が変更され、多数の Winsock Ioctl も Ws2def.h、Ws2ipdef.h、Mswsockdef.h ヘッダー ファイルで定義されています。 Ws2def.h ヘッダー ファイルは、Winsock2.h ヘッダー ファイルによって自動的に含まれます。 Ws2ipdef.h ヘッダー ファイルは、Ws2tcpip.h ヘッダー ファイルによって自動的に含まれます。 Mswsockdef.h ヘッダー ファイルは、Mswsockdef.h ヘッダー ファイルに自動的に含まれます。
要求事項
要件 | 価値 |
---|---|
ヘッダ |
|