Winsock IOCTL
このセクションでは、Windows オペレーティング システムのさまざまなエディションの Winsock Socket 入出力コントロール (IOCTL) について説明します。 ソケット、トランスポート プロトコル、または通信サブシステムのモードを制御するには、 WSAIoctl または WSPIoctl 関数を使用して Winsock IOCTL を発行します。
一部の Winsock IOCTL では、この表で説明できる以上の説明が必要です。このようなオプションには、追加のトピックへのリンクが含まれています。
現在定義されている ioctlsocket オペコードを保持するエンコード スキームを採用すると同時に、 dwIoControlCode パラメーターが 32 ビット エンティティであるのと同じくらい、オペコード識別子空間をパーティション分割する便利な方法を提供できます。 dwIoControlCode パラメーターは、Windows ソケット 1.1 および Unix コントロール コードとの下位互換性を維持しながら、新しいコントロール コードを追加するときにプロトコルとベンダーの独立性を確保するために構築されています。 dwIoControlCode パラメーターの形式は次のとおりです。
I | 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 |
Note
テーブルに表示される dwIoControlCode パラメーターのビットは、列ごとに上から下に垂直方向に読み取る必要があります。 そのため、左端のビットはビット 31、次のビットはビット 30、右端のビットはビット 0 です。
入力バッファーがコードに対して有効な場合は、 IOC_INと同様に設定されます。
出力バッファーがコードに対して有効な場合は、IOC_OUTと同様に O が設定 されます。 入出力バッファーの両方を使用する制御コードは、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 の場合) またはコードが適用されるアドレス ファミリを含む (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 を呼び出すか、lNetworkEvents パラメーターが 0 の WSAEventSelect を呼び出して WSAEventSelect を無効にする必要があります。
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)
アプリケーションがバインドできるソケットのプロトコル ファミリのローカル トランスポート アドレスの一覧を取得します。 アドレスの一覧はアドレス ファミリによって異なり、一部のアドレスはリストから除外されます。
Note
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)
ポート共有と受信表示の並列化を有効にします。 アプリケーションでこのソケット オプションを使用してソケットを異なるプロセッサに関連付け、ソケットを同じアドレスにバインドすると、受信インジケーターは、受信側スケーリング (RSS) ハッシュに基づいてソケット全体に分散されます。 RSS 設定は変更されないため、特定のフロー (ローカル エンドポイント、リモート エンドポイント ペア) は常に同じプロセッサに示されます。 その結果、特定のフローに属するすべてのパケットが同じソケットに示されます。 この IOCTL はバインドする前に呼び出す必要があります。それ以外の場合は WSAEINVAL が返されます。 入力バッファーは、USHORT 型のプロセッサ インデックス (0 ベース) です。 IOCTL は、SO_REUSEADDRおよびSO_REUSE_MULTICASTPORTと互換性がありません。 UDP ソケットでのみサポートされます。
Note
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 構造体の配列として返します。
Note
Windows ソケット 2 準拠の TCP/IP サービス プロバイダーでは、このコマンドのサポートが必須です。
lpvOutBuffer パラメーターは、インターフェイスに関する情報をインターフェイス上のユニキャスト IP アドレスのINTERFACE_INFO構造体の配列として格納するバッファーを指します。 cbOutBuffer パラメーターは、出力バッファーの長さを指定します。 返されるインターフェイスの数 ( lpvOutBuffer パラメーターによって指されるバッファーで返される構造体の数) は、 lpcbBytesReturned パラメーターで返される出力バッファーの実際の長さに基づいて決定できます。
WSAIoctl 関数が SIO_GET_INTERFACE_LIST で呼び出され、ソケットの パラメーターのレベル メンバーがIPPROTO_IPとして定義されていない場合、WSAEINVAL が返されます。 出力バッファーの長さを指定する cbOutBuffer パラメーターが小さすぎる場合、SIO_GET_INTERFACE_LIST を使用して WSAIoctl 関数を呼び出すと WSAEFAULT が返され、構成されたインターフェイスの一覧が受信されます。
SIO_GET_INTERFACE_LISTは、Windows Me/98 および SP4 以降Windows NT 4.0 でサポートされています。
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 を返します。
Note
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 メンバーで返される値は、少なくとも 1 つのインターフェイスで RSS が有効になっているかどうかを示します。
出力バッファーが 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 関数に渡されるソケット ハンドルは、アドレス ファミリ、SOCK_RAW ソケットの種類、プロトコルAF_INET 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 関数に渡されるソケット ハンドルは、アドレス ファミリ、SOCK_RAW ソケットの種類、およびプロトコルAF_INET 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 と 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 問題
- IOCTL SIO_ROUTING_INTERFACE_CHANGEアプリケーションにルーティングの変更 (重複した 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 ウィンドウのスケーリング オプションも無効になっており、true の受信ウィンドウの最大サイズは 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 Version 1809 (10.0;ビルド 17763) 以降: 要求された優先度値が IoPriorityHintVeryLow に設定されている場合、TCP は、ソケットの送信トラフィックレートを制御するために、変更されたバージョンの LEDBAT アルゴリズム (RFC 6817 で定義) を使用します。 受信トラフィックは、この IOCTL の影響を受けません。 LEDBAT はスカベンジャー アルゴリズムであり、その目標は、待機時間を短くし、通常の優先度のトラフィックが存在する場合に邪魔にならないようにして、通常の優先度のトラフィックに悪影響を及ぼすのを防ぐことです。
RFC 6817 も参照してください。
SIO_SET_PRIORITY_HINTは、Windows 10 Version 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)
コンパニオン インターフェイスのコンテキストで有効なソケット の 対応するハンドルを取得するには (たとえば、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_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) では、ヘッダー ファイルのorganizationが変更され、Ws2def.h、Ws2ipdef.h、Mswsockdef.h ヘッダー ファイルにも多数の Winsock Ioctl が定義されています。 Ws2def.h ヘッダー ファイルは、Winsock2.h ヘッダー ファイルによって自動的に含まれます。 Ws2ipdef.h ヘッダー ファイルは、Ws2tcpip.h ヘッダー ファイルによって自動的に含まれます。 Mswsockdef.h ヘッダー ファイルは、Mswsockdef.h ヘッダー ファイルに自動的に含まれます。
要件
要件 | 値 |
---|---|
ヘッダー |
|