CAsyncSocket::IOCtl
更新 : 2007 年 11 月
ソケットのモードを制御します。
BOOL IOCtl(
long lCommand,
DWORD* lpArgument
);
パラメータ
lCommand
ソケットで実行されるコマンド。lpArgument
lCommand のパラメータへのポインタ。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。GetLastError を呼び出すと、固有のエラー コードを取得できます。このメンバ関数では、次のエラーが発生します。
WSANOTINITIALISED この API を使う前に AfxSocketInit の呼び出しが正常終了していることが必要です。
WSAENETDOWN Windows ソケットの実装が、ネットワーク サブシステムの異常を検出しました。
WSAEINVAL lCommand コマンドが無効か、lpArgument に lCommand のコマンドに適切ではないパラメータを指定しています。あるいは、コマンドが、指定したソケットの型に対して適切ではありません。
WSAEINPROGRESS 実行中の Windows ソケット呼び出しがブロッキングされています。
WSAENOTSOCK 記述子がソケットではありません。
解説
このルーチンは、どのような状態でもすべてのソケットに使うことができます。この関数を使って、ソケットに関連する操作パラメータを取得します。プロトコルや通信サブシステムとは無関係です。次のコマンドがサポートされています。
FIONBIO ソケットの非ブロッキング モードを有効または無効にします。パラメータ lpArgument は DWORD 型へのポインタで、非ブロッキング モードを有効にするときは 0 以外、無効にするときは 0 にします。ソケットに対して AsyncSelect が発行されているときに、ソケットをブロッキング モードにする IOCtl を使用すると WSAEINVAL エラーになります。WSAEINVAL エラーにならずに、ソケットをブロッキング モードに戻すには、アプリケーションからパラメータ lEvent を 0 にして AsyncSelect を呼び出し AsyncSelect を無効にした後、IOCtl を呼び出します。
FIONREAD 1 回の Receive の呼び出しでソケットから読み込める最大バイト数を判断します。パラメータ lpArgument は DWORD 型のポインタで、IOCtl はこの変数に結果を格納します。ソケットが SOCK_STREAM 型のときは、FIONREAD は 1 回の Receive で読み込めるデータの総量を返します。データの総量は、通常ソケットにキューイングされているデータの総量と同じです。ソケットが SOCK_DGRAM 型のときは、FIONREAD はソケットにキューイングされている最初のデータグラムのサイズを返します。
SIOCATMARK すべての帯域外データが読み込まれたかどうかを判断します。これは、帯域外のデータをインライン受信するように構成されている (SO_OOBINLINE) SOCK_STREAM 型のソケットのみに有効です。読み込みを待っている帯域外のデータがないときは、0 以外を返します。それ以外は 0 を返し、次にソケットで Receive または ReceiveFrom を実行すると "マーク" の前のデータの一部またはすべてを取得します。つまり、データが残っているかどうかをアプリケーションで判断するには SIOCATMARK 操作を使います。"緊急" (帯域外) データの前に通常のデータがあるときは、順番に受信されます。Receive または ReceiveFrom の 1 回の呼び出しで、帯域外のデータと通常のデータが混在して受信されることはありません。パラメータ lpArgument は DWORD 型のポインタで、IOCtl はこの変数に結果を格納します。
この関数は Berkeley ソケットで使われている ioctl() のサブセットです。FIOASYNC と同等のコマンドはありません。また、ソケット レベルのコマンドは SIOCATMARK がサポートされているだけです。
必要条件
ヘッダー : afxsock.h