WSAIoctl 関数 (winsock2.h)
WSAIoctl 関数は、ソケットのモードを制御します。
構文
int WSAAPI WSAIoctl(
[in] SOCKET s,
[in] DWORD dwIoControlCode,
[in] LPVOID lpvInBuffer,
[in] DWORD cbInBuffer,
[out] LPVOID lpvOutBuffer,
[in] DWORD cbOutBuffer,
[out] LPDWORD lpcbBytesReturned,
[in] LPWSAOVERLAPPED lpOverlapped,
[in] LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
パラメーター
[in] s
ソケットを識別する記述子。
[in] dwIoControlCode
実行する操作の制御コード。 Winsock IOCTL
[in] lpvInBuffer
入力バッファーへのポインター。
[in] cbInBuffer
入力バッファーのサイズ (バイト単位)。
[out] lpvOutBuffer
出力バッファーへのポインター。
[in] cbOutBuffer
出力バッファーのサイズ (バイト単位)。
[out] lpcbBytesReturned
出力の実際のバイト数へのポインター。
[in] lpOverlapped
WSAOVERLAPPED 構造体へのポインター (重複していないソケットの場合は無視されます)。
[in] lpCompletionRoutine
型: _In_opt_ LPWSAOVERLAPPED_COMPLETION_ROUTINE
戻り値
正常に完了すると、WSAIoctl は 0 を返します。 それ以外の場合は、SOCKET_ERRORの値が返され、WSAGetLastError
エラー コード | 意味 |
---|---|
重複する操作が正常に開始され、完了は後で示されます。 | |
|
ネットワーク サブシステムが失敗しました。 |
|
|
|
dwIoControlCode パラメーターが有効なコマンドではないか、指定された入力パラメーターが受け入れられないか、指定されたソケットの型にコマンドが適用されません。 |
|
この関数は、コールバックが進行中のときに呼び出されます。 |
|
|
|
指定された IOCTL コマンドを実現できません。 (たとえば、SIO_SET_QOS または SIO_SET_GROUP_QOS で指定された FLOWSPEC 構造体は満たされません)。 |
|
ソケットは非ブロッキングとしてマークされ、要求された操作はブロックされます。 |
|
ソケット オプションは、指定されたプロトコルではサポートされていません。 たとえば、IPv6 ソケットで SIO_GET_BROADCAST_ADDRESS IOCTL を使用しようとしましたが、データグラム ソケットで TCP SIO_KEEPALIVE_VALS IOCTL を使用しようとしました。 |
備考
WSAIoctl 関数は、ソケット、トランスポート プロトコル、または通信サブシステムに関連付けられている操作パラメーターを設定または取得するために使用されます。
lpOverlapped
重複するソケットの場合、すぐに完了できない操作が開始され、完了は後で示されます。 返される lpcbBytesReturned パラメーターが指す DWORD 値は無視できます。 最終的な完了状態と返されるバイトは、操作が完了したときに適切な完了メソッドが通知されたときに取得できます。
サービス プロバイダーの実装によっては、IOCTL が無期限にブロックされる場合があります。 アプリケーションが WSAIoctl 呼び出しでのブロックを許容できない場合は、特にブロックする可能性が高い IOCTL に対して重複した I/O が推奨されます。
SIO_ADDRESS_LIST_CHANGE
SIO_FINDROUTE
SIO_FLUSH
SIO_GET_QOS
SIO_GET_GROUP_QOS
SIO_ROUTING_INTERFACE_CHANGE
SIO_SET_QOS
SIO_SET_GROUP_QOS
プロトコル固有の IOCTL によっては、ブロックされる可能性が特に高い場合もあります。 利用可能な情報については、関連するプロトコル固有の付属書を確認してください。
lpCompletionRoutine パラメーターが指す完了ルーチンのプロトタイプは次のとおりです。
#ifndef UNICODE
#define UNICODE
#endif
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <Ws2tcpip.h>
#include <stdio.h>
// Link with ws2_32.lib
#pragma comment(lib, "Ws2_32.lib")
void CALLBACK CompletionRoutine (
IN DWORD dwError,
IN DWORD cbTransferred,
IN LPWSAOVERLAPPED lpOverlapped,
IN DWORD dwFlags
);
CompletionRoutine は、アプリケーションが指定した関数名のプレースホルダーです。
現在定義されている ioctlsocket オペコード
私 | 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 |
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 の場合)、またはコードが適用されるアドレス ファミリ (T == 2 の場合) を含む 11 ビット数量です。 これが Unix IOCTL コード (T == 0) の場合、このパラメーターの値は Unix 上のコードと同じです。 これが汎用 Windows ソケット 2 IOCTL (T == 1) の場合、このパラメーターをコード パラメーターの拡張として使用して、追加のコード値を指定できます。
コード 操作の特定の IOCTL コードを含む 16 ビットの数量。
次の Unix IOCTL コード (コマンド) がサポートされています。
次の Windows ソケット 2 コマンドがサポートされています。
重複した操作がすぐに完了すると、WSAIoctl
重複するソケットを使用して呼び出された場合、lpOverlapped パラメーター
完了ルーチンのプロトタイプは次のとおりです。
void CALLBACK CompletionRoutine(
IN DWORD dwError,
IN DWORD cbTransferred,
IN LPWSAOVERLAPPED lpOverlapped,
IN DWORD dwFlags
);
この CompletionRoutine は、アプリケーション定義関数またはライブラリ定義関数のプレースホルダーです。 完了ルーチンは、スレッドが警告可能な状態にある場合にのみ呼び出されます。 スレッドをアラート可能な状態にするには、
この関数から戻って、このソケットに対して別の保留中の完了ルーチンを呼び出すことができます。 完了ルーチンは任意の順序で呼び出すことができます。重複する操作が完了した順序で呼び出されるとは限りません。
互換性
T == 0 の IOCTL コードは、バークレイ ソケットで使用される IOCTL コードのサブセットです。 特に、FIOASYNC必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8.1、Windows Vista [デスクトップ アプリ |UWP アプリ] |
サポートされる最小サーバー | Windows Server 2003 [デスクトップ アプリ |UWP アプリ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winsock2.h |
ライブラリ | Ws2_32.lib |
DLL | Ws2_32.dll |
関連項目
WSASocket の
ioctlsocket を
ソケット