Win32 API 日本語リファレンス
ホームNetworking.WinSock › WSAPOLLFD

WSAPOLLFD

構造体
サイズx64: 16 バイト / x86: 8 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
fdSOCKET8/4+0+0状態を取得する対象のソケットの識別子です。負の値が設定されている場合、このパラメーターは無視されます。「解説」を参照してください。
eventsWSAPOLL_EVENT_FLAGS2+8+4

要求する状態の種類を示すフラグのセットです。次のうち 1 つ以上でなければなりません。

フラグ 意味
POLLPRI 優先データをブロックせずに読み取れます。このフラグは Microsoft Winsock プロバイダーではサポートされていません。
POLLRDBAND 優先帯域 (帯域外) データをブロックせずに読み取れます。
POLLRDNORM 通常のデータをブロックせずに読み取れます。
POLLWRNORM 通常のデータをブロックせずに書き込めます。

POLLIN フラグは、POLLRDNORM フラグと POLLRDBAND フラグの値を組み合わせたものとして定義されています。POLLOUT フラグは、POLLWRNORM フラグの値と同じものとして定義されています。

reventsWSAPOLL_EVENT_FLAGS2+10+6

WSAPoll 関数の呼び出しから戻ったときに、状態の照会結果を示すフラグのセットです。次のフラグの組み合わせになります。

フラグ 説明
POLLERR エラーが発生しました。
POLLHUP ストリーム指向の接続が切断されたか、中止されました。
POLLNVAL 無効なソケットが使用されました。
POLLPRI 優先データをブロックせずに読み取れます。このフラグは Microsoft Winsock プロバイダーからは返されません。
POLLRDBAND 優先帯域 (帯域外) データをブロックせずに読み取れます。
POLLRDNORM 通常のデータをブロックせずに読み取れます。
POLLWRNORM 通常のデータをブロックせずに書き込めます。

POLLIN フラグは、POLLRDNORM フラグと POLLRDBAND フラグの値を組み合わせたものとして定義されています。POLLOUT フラグは、POLLWRNORM フラグの値と同じものとして定義されています。

状態の照会条件を満たさず、エラーも発生していないソケットについては、戻り時に revents メンバーは 0 に設定されます。

公式ドキュメント

WSAPOLLFD 構造体は、WSAPoll 関数で使用されるソケット情報を格納します。

解説(Remarks)

WSAPOLLFD 構造体は、Windows Vista 以降で定義されています。

WSAPOLLFD 構造体は、1 つ以上のソケットの状態を判定するために WSAPoll 関数で使用されます。状態を要求するソケットのセットは、WSAPOLLFD 構造体の配列である fdarray パラメーターで指定します。アプリケーションは、WSAPOLLFD 構造体の events メンバーに適切なフラグを設定して、対応する各ソケットについて要求する状態の種類を指定します。WSAPoll 関数は、ソケットの状態を WSAPOLLFD 構造体の revents メンバーに返します。

WSAPOLLFD 構造体の fd メンバーに負の値が設定されている場合、その構造体は WSAPoll 関数の呼び出しで無視され、戻り時に revents メンバーはクリアされます。これは、WSAPollfdarray パラメーター用に固定の割り当てを維持するアプリケーションにとって便利です。そのようなアプリケーションは、未使用のエントリのために配列の要素を詰め直したり、メモリを再割り当てしたりしてリソースを浪費する必要がありません。WSAPoll 関数を呼び出す前に revents メンバーをクリアする必要はありません。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// WSAPOLLFD  (x64 16 / x86 8 バイト)
typedef struct WSAPOLLFD {
    SOCKET fd;
    WSAPOLL_EVENT_FLAGS events;
    WSAPOLL_EVENT_FLAGS revents;
} WSAPOLLFD;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WSAPOLLFD
{
    public UIntPtr fd;
    public short events;
    public short revents;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WSAPOLLFD
    Public fd As UIntPtr
    Public events As Short
    Public revents As Short
End Structure
import ctypes
from ctypes import wintypes

class WSAPOLLFD(ctypes.Structure):
    _fields_ = [
        ("fd", ctypes.c_size_t),
        ("events", ctypes.c_short),
        ("revents", ctypes.c_short),
    ]
#[repr(C)]
pub struct WSAPOLLFD {
    pub fd: usize,
    pub events: i16,
    pub revents: i16,
}
import "golang.org/x/sys/windows"

type WSAPOLLFD struct {
	fd uintptr
	events int16
	revents int16
}
type
  WSAPOLLFD = record
    fd: NativeUInt;
    events: Smallint;
    revents: Smallint;
  end;
const WSAPOLLFD = extern struct {
    fd: usize,
    events: i16,
    revents: i16,
};
type
  WSAPOLLFD {.bycopy.} = object
    fd: uint
    events: int16
    revents: int16
struct WSAPOLLFD
{
    size_t fd;
    short events;
    short revents;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WSAPOLLFD サイズ: 8 バイト(x86)
dim st, 2    ; 4byte整数×2(構造体サイズ 8 / 4 切り上げ)
; fd : SOCKET (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; events : WSAPOLL_EVENT_FLAGS (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; revents : WSAPOLL_EVENT_FLAGS (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WSAPOLLFD サイズ: 16 バイト(x64)
dim st, 4    ; 4byte整数×4(構造体サイズ 16 / 4 切り上げ)
; fd : SOCKET (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; events : WSAPOLL_EVENT_FLAGS (+8, 2byte)  wpoke st,8,値  /  値 = wpeek(st,8)
; revents : WSAPOLL_EVENT_FLAGS (+10, 2byte)  wpoke st,10,値  /  値 = wpeek(st,10)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WSAPOLLFD
    #field intptr fd
    #field short events
    #field short revents
#endstruct

stdim st, WSAPOLLFD        ; NSTRUCT 変数を確保
st->fd = 100
mes "fd=" + st->fd