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 を呼び出すことによって特定のエラー コードを取得できます。

エラー コード 意味
WSANOTINITIALIZED
この関数を使用する前に、 WSAStartup 呼び出しが正常に行われる必要があります。
WSAENETDOWN
ネットワーク サブシステムが失敗しました。
WSAEINPROGRESS
ブロックしている Windows Sockets 1.1 呼び出しが進行中であるか、サービス プロバイダーがコールバック関数を処理しています。
WSAENOTSOCK
記述子 s はソケットではありません。
WSAEFAULT
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.1Windows 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

こちらもご覧ください

WSAAsyncSelect

WSAEventSelect

WSAIoctl

Winsock 関数

Winsock リファレンス

getsockopt

setsockopt

socket