HTTP_TIMEOUT_LIMIT_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Flags | HTTP_PROPERTY_FLAGS | 4 | +0 | +0 | プロパティが存在するかどうかを指定する HTTP_PROPERTY_FLAGS 構造体です。 |
| EntityBody | WORD | 2 | +4 | +4 | リクエストのエンティティ本体が到着するまでに許容される時間 (秒単位) です。 HTTP Server API は、リクエストにエンティティ本体がある場合にこのタイマーを開始します。タイマーの満了時間は、最初は構成された値に設定されます。HTTP Server API がそのリクエストで追加のデータ通知を受け取ると、タイマーをリセットして接続にさらに別の間隔を与えます。 |
| DrainEntityBody | WORD | 2 | +6 | +6 | Keep-Alive 接続において、HTTP Server API がエンティティ本体を排出 (ドレイン) するために許容される時間 (秒単位) です。 Keep-Alive 接続では、アプリケーションがリクエストに対する応答を送信した後、リクエストのエンティティ本体が完全に到着する前に、HTTP Server API はクライアントからのパイプライン化された可能性のある次のリクエストに到達するために、残りのエンティティ本体の排出を開始します。残りのエンティティ本体を排出する時間が許容される期間を超えると、接続はタイムアウトします。 |
| RequestQueue | WORD | 2 | +8 | +8 | アプリケーションがリクエストを取り出すまでに、そのリクエストがリクエストキュー内に留まることを許容される時間 (秒単位) です。 |
| IdleConnection | WORD | 2 | +10 | +10 | アイドル状態の接続に許容される時間 (秒単位) です。 このタイムアウトは、接続上の最初のリクエストがアプリケーションにルーティングされた後にのみ適用されます。詳細については、「解説」のセクションを参照してください。 |
| HeaderWait | WORD | 2 | +12 | +12 | HTTP Server API がリクエストヘッダーを解析するために許容される時間 (秒単位) です。 このタイムアウトは、接続上の最初のリクエストがアプリケーションにルーティングされた後にのみ適用されます。詳細については、「解説」のセクションを参照してください。 |
| MinSendRate | DWORD | 4 | +16 | +16 | 応答の最小送信レート (バイト/秒) です。既定の応答送信レートは 150 バイト/秒です。 このタイマーを無効にするには、MinSendRate に MAXULONG を設定します。 |
公式ドキュメント
HTTP_TIMEOUT_LIMIT_INFO 構造体は、アプリケーション固有の接続タイムアウト制限を定義します。
この構造体は、URL グループ、サーバーセッション、またはリクエストキューに対して HttpServerTimeoutsProperty を設定または照会するときに使用しなければなりません。
解説(Remarks)
この構造体は、接続タイムアウトを設定または照会するために HttpQueryServerSessionProperty 関数および HttpSetServerSessionProperty 関数で使用されます。次の表に既定のタイムアウトを示します。
| タイマー | HTTP Server API の既定値 | HTTP Server API 全体の構成 | アプリケーション固有の構成 |
|---|---|---|---|
| EntityBody | 2 分 | いいえ | はい |
| DrainEntityBody | 2 分 | いいえ | はい |
| RequestQueue | 2 分 | いいえ | はい |
| IdleConnection | 2 分 | はい | 制限あり |
| HeaderWait | 2 分 | はい | 制限あり |
| MinSendRate | 150 バイト/秒 | いいえ | はい |
接続タイムアウトを構成するために HttpSetServerSessionProperty または HttpSetUrlGroupProperty を呼び出しても、影響を受けるのは呼び出し元のアプリケーションのみであり、ドライバー全体のタイムアウト制限は設定されません。アイドル接続タイマーとヘッダー待機タイマーは、HttpSetServiceConfiguration を呼び出すことで、すべての HTTP アプリケーションに対して構成できます。HTTP Server API 全体のタイムアウトを構成するには管理者特権が必要です。HTTP Server API 全体の構成は、コンピューター上のすべての HTTP アプリケーションに影響し、コンピューターをシャットダウンしても保持されます。
アプリケーション固有の IdleConnection タイマーと HeaderWait タイマーは、限定的な形でのみ設定されます。HTTP Server API は、ヘッダーが解析されるまで、リクエストが関連付けられているリクエストキューまたは URL グループを判別できません。そのため、HTTP Server API は接続上の最初のリクエストに対しては既定の IdleConnection タイマーと HeaderWait タイマーを適用します。Keep-Alive 接続上の後続のリクエストでは、アプリケーション固有のタイムアウトが使用されます。
サーバーセッションにタイムアウトを設定すると、そのサーバーセッション配下のすべての URL グループに影響します。ただし、URL グループにタイムアウトが構成されている場合は、URL グループの設定がサーバーセッションの構成より優先されます。
サーバーセッションでタイムアウトを 0 に設定すると、HTTP Server API はそのタイマーの既定値に戻ります。URL グループに設定されたタイマーについては、サーバーセッションのタイムアウトが存在すればそれが使用され、存在しない場合は HTTP Server API の既定値が使用されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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 Structureimport 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: uint32struct 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