ioctlsocket 関数 (winsock.h)
ioctlsocket 関数は、ソケットの I/O モードを制御します。
構文
int ioctlsocket(
[in] SOCKET s,
[in] long cmd,
[in, out] u_long *argp
);
パラメーター
[in] s
ソケットを識別する記述子。
[in] cmd
ソケットに対して実行するコマンド。 「Winsock IOCTL」を参照してください。
[in, out] argp
cmd のパラメーターへのポインター。
戻り値
正常に完了すると、 ioctlsocket は 0 を返します。 それ以外の場合は、SOCKET_ERRORの値が返され、 WSAGetLastError を呼び出すことによって特定のエラー コードを取得できます。
エラー コード | 意味 |
---|---|
この関数を使用する前に、 WSAStartup 呼び出しが正常に行われる必要があります。 | |
ネットワーク サブシステムが失敗しました。 | |
ブロックしている Windows Sockets 1.1 呼び出しが進行中であるか、サービス プロバイダーがコールバック関数を処理しています。 | |
記述子 s はソケットではありません。 | |
argp パラメーターは、ユーザー・アドレス・スペースの有効な部分ではありません。 |
注釈
ioctlsocket 関数は、任意の状態の任意のソケットで使用できます。 プロトコルおよび通信サブシステムに関係なく、ソケットに関連付けられているいくつかの操作パラメーターを設定または取得するために使用されます。 cmd パラメーターで使用するためにサポートされているコマンドとそのセマンティクスを次に示します。
WSAIoctl 関数は、ソケット、トランスポート プロトコル、または通信サブシステムに関連付けられている操作パラメーターを設定または取得するために使用されます。
WSAIoctl 関数は ioctlsocket 関数よりも強力であり、操作パラメーターが設定または取得するために使用できる値が多数サポートされています。
コード例
次の例では、 ioctlsocket 関数の使用方法を示します。
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "Ws2_32.lib")
void main()
{
//-------------------------
// Initialize Winsock
WSADATA wsaData;
int iResult;
u_long iMode = 0;
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != NO_ERROR)
printf("Error at WSAStartup()\n");
//-------------------------
// Create a SOCKET object.
SOCKET m_socket;
m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (m_socket == INVALID_SOCKET) {
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return;
}
//-------------------------
// Set the socket I/O mode: In this case FIONBIO
// enables or disables the blocking mode for the
// socket based on the numerical value of iMode.
// If iMode = 0, blocking is enabled;
// If iMode != 0, non-blocking mode is enabled.
iResult = ioctlsocket(m_socket, FIONBIO, &iMode);
if (iResult != NO_ERROR)
printf("ioctlsocket failed with error: %ld\n", iResult);
}
互換性
この ioctlsocket 関数は、Berkeley ソケットにある ioctl 関数と比較して、ソケット上の関数のサブセットのみを実行します。 ioctlsocket 関数には ioctl の FIOASYNC と同等のコマンド パラメーターはなく、ioctlsocket でサポートされている唯一のソケット レベルのコマンドは SIOCATMARK です。Windows Phone 8: この関数は、Windows Phone 8 以降の Windows Phone ストア アプリでサポートされています。
Windows 8.1とWindows Server 2012 R2: この関数は、Windows 8.1、Windows Server 2012 R2 以降の Windows ストア アプリでサポートされています。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8.1、Windows Vista [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | winsock.h (Winsock2.h を含む) |
Library | Ws2_32.lib |
[DLL] | Ws2_32.dll |