WSAIoctl

WSAIoctl 関数は、ソケットのモードを制御する。

WSAIoctl s, dwIoControlCode, lpvInBuffer, cbInBuffer, lpvOutBuffer, cbOutBuffer, lpcbBytesReturned, lpOverlapped, lpCompletionRoutine

s : [int] ソケットを識別するディスクリプタ。
dwIoControlCode : [int] 実行する操作の制御コード。
lpvInBuffer : [intptr] 入力バッファへのポインタ。
cbInBuffer : [int] 入力バッファのサイズ (バイト単位)。
lpvOutBuffer : [intptr] 出力バッファへのポインタ。
cbOutBuffer : [int] 出力バッファのサイズ (バイト単位)。
lpcbBytesReturned : [var] 実際の出力バイト数へのポインタ。
lpOverlapped : [var] WSAOVERLAPPED 構造体へのポインタ (非オーバーラップソケットでは無視される)。
lpCompletionRoutine : [int] 型: \_In_opt\_ [**LPWSAOVERLAPPED_COMPLETION_ROUTINE**](./nc-winsock2-lpwsaoverlapped_completion_routine.md) 注 操作完了時に呼び出される完了ルーチンへのポインタ (非オーバーラップソケットでは無視される)。備考を参照。

(プラグイン / モジュール : ws2_32.dll)

解説

WSAIoctl 関数は、ソケットのモードを制御する。

[戻り値]
正常完了時、WSAIoctl はゼロを返す。そうでない場合は SOCKET_ERROR を返し、WSAGetLastError
を呼び出すことで特定のエラーコードを取得できる。
(以下省略)

[備考]
WSAIoctl
関数は、ソケット、トランスポートプロトコル、または通信サブシステムに関連する動作パラメータを設定または取得するために使用される。lpOverlapped
と lpCompletionRoutine の両方が NULL
の場合、この関数内のソケットは非オーバーラップソケットとして扱われる。非オーバーラップソケットでは lpOverlapped と
lpCompletionRoutine パラメータは無視され、関数は標準の ioctlsocket 関数と同様に動作する。ただし、ソケット
s がブロッキングモードであれば関数がブロックする可能性がある点が異なる。ソケット s
がノンブロッキングモードの場合、この関数は指定した操作を即座に完了できないと WSAEWOULDBLOCK
を返すことがある。この場合、アプリケーションはソケットをブロッキングモードに変更してリクエストを再発行するか、対応するネットワークイベント
(たとえば SIO_ROUTING_INTERFACE_CHANGE に対する
FD_ROUTING_INTERFACE_CHANGE、SIO_ADDRESS_LIST_CHANGE に対する
FD_ADDRESS_LIST_CHANGE) を Windows メッセージベース (WSAAsyncSelect)
またはイベントベース (WSAEventSelect)
の通知機構で待つことができる。オーバーラップソケットでは、即座に完了できない操作は開始され、後で完了が通知される。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
パラメータが指す完了ルーチンのプロトタイプは次のとおりである。
(以下省略)

情報

プラグイン / モジュールws2_32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の ws2_32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_ws2_32_gen2.hs