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

HTTP_TIMEOUT_LIMIT_INFO

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

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

フィールド

フィールドサイズx64x86説明
FlagsHTTP_PROPERTY_FLAGS4+0+0プロパティの有効状態を示すHTTP_PROPERTY_FLAGSである。
EntityBodyWORD2+4+4エンティティ本文受信のタイムアウトを秒単位で示す値である。
DrainEntityBodyWORD2+6+6残存エンティティ本文の排出タイムアウトを秒単位で示す値である。
RequestQueueWORD2+8+8要求キュー待機のタイムアウトを秒単位で示す値である。
IdleConnectionWORD2+10+10アイドル接続のタイムアウトを秒単位で示す値である。
HeaderWaitWORD2+12+12ヘッダー受信完了までの待機タイムアウトを秒単位で示す値である。
MinSendRateDWORD4+16+16最小送信速度をバイト/秒で示す値である。これを下回ると切断する。

各言語での定義

#include <windows.h>

// HTTP_PROPERTY_FLAGS  (x64 4 / x86 4 バイト)
typedef struct HTTP_PROPERTY_FLAGS {
    DWORD _bitfield;
} HTTP_PROPERTY_FLAGS;

// HTTP_TIMEOUT_LIMIT_INFO  (x64 20 / x86 20 バイト)
typedef struct HTTP_TIMEOUT_LIMIT_INFO {
    HTTP_PROPERTY_FLAGS Flags;
    WORD EntityBody;
    WORD DrainEntityBody;
    WORD RequestQueue;
    WORD IdleConnection;
    WORD HeaderWait;
    DWORD MinSendRate;
} HTTP_TIMEOUT_LIMIT_INFO;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct HTTP_PROPERTY_FLAGS
{
    public uint _bitfield;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct HTTP_TIMEOUT_LIMIT_INFO
{
    public HTTP_PROPERTY_FLAGS Flags;
    public ushort EntityBody;
    public ushort DrainEntityBody;
    public ushort RequestQueue;
    public ushort IdleConnection;
    public ushort HeaderWait;
    public uint MinSendRate;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure HTTP_PROPERTY_FLAGS
    Public _bitfield As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure HTTP_TIMEOUT_LIMIT_INFO
    Public Flags As HTTP_PROPERTY_FLAGS
    Public EntityBody As UShort
    Public DrainEntityBody As UShort
    Public RequestQueue As UShort
    Public IdleConnection As UShort
    Public HeaderWait As UShort
    Public MinSendRate As UInteger
End Structure
import ctypes
from ctypes import wintypes

class HTTP_PROPERTY_FLAGS(ctypes.Structure):
    _fields_ = [
        ("_bitfield", wintypes.DWORD),
    ]

class HTTP_TIMEOUT_LIMIT_INFO(ctypes.Structure):
    _fields_ = [
        ("Flags", HTTP_PROPERTY_FLAGS),
        ("EntityBody", ctypes.c_ushort),
        ("DrainEntityBody", ctypes.c_ushort),
        ("RequestQueue", ctypes.c_ushort),
        ("IdleConnection", ctypes.c_ushort),
        ("HeaderWait", ctypes.c_ushort),
        ("MinSendRate", wintypes.DWORD),
    ]
#[repr(C)]
pub struct HTTP_PROPERTY_FLAGS {
    pub _bitfield: u32,
}

#[repr(C)]
pub struct HTTP_TIMEOUT_LIMIT_INFO {
    pub Flags: HTTP_PROPERTY_FLAGS,
    pub EntityBody: u16,
    pub DrainEntityBody: u16,
    pub RequestQueue: u16,
    pub IdleConnection: u16,
    pub HeaderWait: u16,
    pub MinSendRate: u32,
}
import "golang.org/x/sys/windows"

type HTTP_PROPERTY_FLAGS struct {
	_bitfield uint32
}

type HTTP_TIMEOUT_LIMIT_INFO struct {
	Flags HTTP_PROPERTY_FLAGS
	EntityBody uint16
	DrainEntityBody uint16
	RequestQueue uint16
	IdleConnection uint16
	HeaderWait uint16
	MinSendRate uint32
}
type
  HTTP_PROPERTY_FLAGS = record
    _bitfield: DWORD;
  end;

  HTTP_TIMEOUT_LIMIT_INFO = record
    Flags: HTTP_PROPERTY_FLAGS;
    EntityBody: Word;
    DrainEntityBody: Word;
    RequestQueue: Word;
    IdleConnection: Word;
    HeaderWait: Word;
    MinSendRate: DWORD;
  end;
const HTTP_PROPERTY_FLAGS = extern struct {
    _bitfield: u32,
};

const HTTP_TIMEOUT_LIMIT_INFO = extern struct {
    Flags: HTTP_PROPERTY_FLAGS,
    EntityBody: u16,
    DrainEntityBody: u16,
    RequestQueue: u16,
    IdleConnection: u16,
    HeaderWait: u16,
    MinSendRate: u32,
};
type
  HTTP_PROPERTY_FLAGS {.bycopy.} = object
    _bitfield: uint32

  HTTP_TIMEOUT_LIMIT_INFO {.bycopy.} = object
    Flags: HTTP_PROPERTY_FLAGS
    EntityBody: uint16
    DrainEntityBody: uint16
    RequestQueue: uint16
    IdleConnection: uint16
    HeaderWait: uint16
    MinSendRate: uint32
struct HTTP_PROPERTY_FLAGS
{
    uint _bitfield;
}

struct HTTP_TIMEOUT_LIMIT_INFO
{
    HTTP_PROPERTY_FLAGS Flags;
    ushort EntityBody;
    ushort DrainEntityBody;
    ushort RequestQueue;
    ushort IdleConnection;
    ushort HeaderWait;
    uint MinSendRate;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; HTTP_TIMEOUT_LIMIT_INFO サイズ: 20 バイト(x64)
dim st, 5    ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; Flags : HTTP_PROPERTY_FLAGS (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; EntityBody : WORD (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; DrainEntityBody : WORD (+6, 2byte)  wpoke st,6,値  /  値 = wpeek(st,6)
; RequestQueue : WORD (+8, 2byte)  wpoke st,8,値  /  値 = wpeek(st,8)
; IdleConnection : WORD (+10, 2byte)  wpoke st,10,値  /  値 = wpeek(st,10)
; HeaderWait : WORD (+12, 2byte)  wpoke st,12,値  /  値 = wpeek(st,12)
; MinSendRate : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global HTTP_PROPERTY_FLAGS
    #field int _bitfield
#endstruct

#defstruct global HTTP_TIMEOUT_LIMIT_INFO
    #field HTTP_PROPERTY_FLAGS Flags
    #field short EntityBody
    #field short DrainEntityBody
    #field short RequestQueue
    #field short IdleConnection
    #field short HeaderWait
    #field int MinSendRate
#endstruct

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