ホーム › Networking.WinSock › RM_SENDER_STATS
RM_SENDER_STATS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| DataBytesSent | ULONGLONG | 8 | +0 | +0 | 送信されたクライアントデータのバイト数。 |
| TotalBytesSent | ULONGLONG | 8 | +8 | +8 | 送信された合計バイト数。ソースパスメッセージ (SPM)、オリジナルデータ (ODATA)、および修復データ (RDATA) の各シーケンスが含まれます。 |
| NaksReceived | ULONGLONG | 8 | +16 | +16 | 受信した NAK の数。 |
| NaksReceivedTooLate | ULONGLONG | 8 | +24 | +24 | 送信ウィンドウが NAK 対象のシーケンスを越えて進んだ後に受信した NAK の数。 |
| NumOutstandingNaks | ULONGLONG | 8 | +32 | +32 | 応答がまだ送信されていない NAK の数。 |
| NumNaksAfterRData | ULONGLONG | 8 | +40 | +40 | 修復データ (RDATA) シーケンスの送信後に受信し、応答がまだ送信されていない NAK の数。 |
| RepairPacketsSent | ULONGLONG | 8 | +48 | +48 | 送信された修復データ (RDATA) パケットの数。 |
| BufferSpaceAvailable | ULONGLONG | 8 | +56 | +56 | 破棄された部分メッセージの数。 |
| TrailingEdgeSeqId | ULONGLONG | 8 | +64 | +64 | 送信ウィンドウ内で最も古いシーケンス識別子。 |
| LeadingEdgeSeqId | ULONGLONG | 8 | +72 | +72 | 送信ウィンドウ内で最も新しいシーケンス識別子。 |
| RateKBitsPerSecOverall | ULONGLONG | 8 | +80 | +80 | セッション開始時点から内部的に計算された送信レート (キロビット/秒単位)。 |
| RateKBitsPerSecLast | ULONGLONG | 8 | +88 | +88 | INTERNAL_RATE_CALCULATION_FREQUENCY で指定された期間における送信レート。 |
| TotalODataPacketsSent | ULONGLONG | 8 | +96 | +96 | 送信されたオリジナルデータ (ODATA) パケットの合計数。 |
公式ドキュメント
RM_SENDER_STATS 構造体は、信頼性のあるマルチキャスト (Reliable Multicast) の送信側セッションに関する統計情報を提供します。この構造体は RM_SENDER_STATISTICS ソケットオプションと共に使用します。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// RM_SENDER_STATS (x64 104 / x86 104 バイト)
typedef struct RM_SENDER_STATS {
ULONGLONG DataBytesSent;
ULONGLONG TotalBytesSent;
ULONGLONG NaksReceived;
ULONGLONG NaksReceivedTooLate;
ULONGLONG NumOutstandingNaks;
ULONGLONG NumNaksAfterRData;
ULONGLONG RepairPacketsSent;
ULONGLONG BufferSpaceAvailable;
ULONGLONG TrailingEdgeSeqId;
ULONGLONG LeadingEdgeSeqId;
ULONGLONG RateKBitsPerSecOverall;
ULONGLONG RateKBitsPerSecLast;
ULONGLONG TotalODataPacketsSent;
} RM_SENDER_STATS;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RM_SENDER_STATS
{
public ulong DataBytesSent;
public ulong TotalBytesSent;
public ulong NaksReceived;
public ulong NaksReceivedTooLate;
public ulong NumOutstandingNaks;
public ulong NumNaksAfterRData;
public ulong RepairPacketsSent;
public ulong BufferSpaceAvailable;
public ulong TrailingEdgeSeqId;
public ulong LeadingEdgeSeqId;
public ulong RateKBitsPerSecOverall;
public ulong RateKBitsPerSecLast;
public ulong TotalODataPacketsSent;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RM_SENDER_STATS
Public DataBytesSent As ULong
Public TotalBytesSent As ULong
Public NaksReceived As ULong
Public NaksReceivedTooLate As ULong
Public NumOutstandingNaks As ULong
Public NumNaksAfterRData As ULong
Public RepairPacketsSent As ULong
Public BufferSpaceAvailable As ULong
Public TrailingEdgeSeqId As ULong
Public LeadingEdgeSeqId As ULong
Public RateKBitsPerSecOverall As ULong
Public RateKBitsPerSecLast As ULong
Public TotalODataPacketsSent As ULong
End Structureimport ctypes
from ctypes import wintypes
class RM_SENDER_STATS(ctypes.Structure):
_fields_ = [
("DataBytesSent", ctypes.c_ulonglong),
("TotalBytesSent", ctypes.c_ulonglong),
("NaksReceived", ctypes.c_ulonglong),
("NaksReceivedTooLate", ctypes.c_ulonglong),
("NumOutstandingNaks", ctypes.c_ulonglong),
("NumNaksAfterRData", ctypes.c_ulonglong),
("RepairPacketsSent", ctypes.c_ulonglong),
("BufferSpaceAvailable", ctypes.c_ulonglong),
("TrailingEdgeSeqId", ctypes.c_ulonglong),
("LeadingEdgeSeqId", ctypes.c_ulonglong),
("RateKBitsPerSecOverall", ctypes.c_ulonglong),
("RateKBitsPerSecLast", ctypes.c_ulonglong),
("TotalODataPacketsSent", ctypes.c_ulonglong),
]#[repr(C)]
pub struct RM_SENDER_STATS {
pub DataBytesSent: u64,
pub TotalBytesSent: u64,
pub NaksReceived: u64,
pub NaksReceivedTooLate: u64,
pub NumOutstandingNaks: u64,
pub NumNaksAfterRData: u64,
pub RepairPacketsSent: u64,
pub BufferSpaceAvailable: u64,
pub TrailingEdgeSeqId: u64,
pub LeadingEdgeSeqId: u64,
pub RateKBitsPerSecOverall: u64,
pub RateKBitsPerSecLast: u64,
pub TotalODataPacketsSent: u64,
}import "golang.org/x/sys/windows"
type RM_SENDER_STATS struct {
DataBytesSent uint64
TotalBytesSent uint64
NaksReceived uint64
NaksReceivedTooLate uint64
NumOutstandingNaks uint64
NumNaksAfterRData uint64
RepairPacketsSent uint64
BufferSpaceAvailable uint64
TrailingEdgeSeqId uint64
LeadingEdgeSeqId uint64
RateKBitsPerSecOverall uint64
RateKBitsPerSecLast uint64
TotalODataPacketsSent uint64
}type
RM_SENDER_STATS = record
DataBytesSent: UInt64;
TotalBytesSent: UInt64;
NaksReceived: UInt64;
NaksReceivedTooLate: UInt64;
NumOutstandingNaks: UInt64;
NumNaksAfterRData: UInt64;
RepairPacketsSent: UInt64;
BufferSpaceAvailable: UInt64;
TrailingEdgeSeqId: UInt64;
LeadingEdgeSeqId: UInt64;
RateKBitsPerSecOverall: UInt64;
RateKBitsPerSecLast: UInt64;
TotalODataPacketsSent: UInt64;
end;const RM_SENDER_STATS = extern struct {
DataBytesSent: u64,
TotalBytesSent: u64,
NaksReceived: u64,
NaksReceivedTooLate: u64,
NumOutstandingNaks: u64,
NumNaksAfterRData: u64,
RepairPacketsSent: u64,
BufferSpaceAvailable: u64,
TrailingEdgeSeqId: u64,
LeadingEdgeSeqId: u64,
RateKBitsPerSecOverall: u64,
RateKBitsPerSecLast: u64,
TotalODataPacketsSent: u64,
};type
RM_SENDER_STATS {.bycopy.} = object
DataBytesSent: uint64
TotalBytesSent: uint64
NaksReceived: uint64
NaksReceivedTooLate: uint64
NumOutstandingNaks: uint64
NumNaksAfterRData: uint64
RepairPacketsSent: uint64
BufferSpaceAvailable: uint64
TrailingEdgeSeqId: uint64
LeadingEdgeSeqId: uint64
RateKBitsPerSecOverall: uint64
RateKBitsPerSecLast: uint64
TotalODataPacketsSent: uint64struct RM_SENDER_STATS
{
ulong DataBytesSent;
ulong TotalBytesSent;
ulong NaksReceived;
ulong NaksReceivedTooLate;
ulong NumOutstandingNaks;
ulong NumNaksAfterRData;
ulong RepairPacketsSent;
ulong BufferSpaceAvailable;
ulong TrailingEdgeSeqId;
ulong LeadingEdgeSeqId;
ulong RateKBitsPerSecOverall;
ulong RateKBitsPerSecLast;
ulong TotalODataPacketsSent;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RM_SENDER_STATS サイズ: 104 バイト(x64)
dim st, 26 ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; DataBytesSent : ULONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; TotalBytesSent : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; NaksReceived : ULONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; NaksReceivedTooLate : ULONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; NumOutstandingNaks : ULONGLONG (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; NumNaksAfterRData : ULONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; RepairPacketsSent : ULONGLONG (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; BufferSpaceAvailable : ULONGLONG (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; TrailingEdgeSeqId : ULONGLONG (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; LeadingEdgeSeqId : ULONGLONG (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; RateKBitsPerSecOverall : ULONGLONG (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; RateKBitsPerSecLast : ULONGLONG (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; TotalODataPacketsSent : ULONGLONG (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global RM_SENDER_STATS
#field int64 DataBytesSent
#field int64 TotalBytesSent
#field int64 NaksReceived
#field int64 NaksReceivedTooLate
#field int64 NumOutstandingNaks
#field int64 NumNaksAfterRData
#field int64 RepairPacketsSent
#field int64 BufferSpaceAvailable
#field int64 TrailingEdgeSeqId
#field int64 LeadingEdgeSeqId
#field int64 RateKBitsPerSecOverall
#field int64 RateKBitsPerSecLast
#field int64 TotalODataPacketsSent
#endstruct
stdim st, RM_SENDER_STATS ; NSTRUCT 変数を確保
st->DataBytesSent = 100
mes "DataBytesSent=" + st->DataBytesSent