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

RM_SENDER_STATS

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

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

フィールド

フィールドサイズx64x86説明
DataBytesSentULONGLONG8+0+0送信されたクライアントデータのバイト数。
TotalBytesSentULONGLONG8+8+8送信された合計バイト数。ソースパスメッセージ (SPM)、オリジナルデータ (ODATA)、および修復データ (RDATA) の各シーケンスが含まれます。
NaksReceivedULONGLONG8+16+16受信した NAK の数。
NaksReceivedTooLateULONGLONG8+24+24送信ウィンドウが NAK 対象のシーケンスを越えて進んだ後に受信した NAK の数。
NumOutstandingNaksULONGLONG8+32+32応答がまだ送信されていない NAK の数。
NumNaksAfterRDataULONGLONG8+40+40修復データ (RDATA) シーケンスの送信後に受信し、応答がまだ送信されていない NAK の数。
RepairPacketsSentULONGLONG8+48+48送信された修復データ (RDATA) パケットの数。
BufferSpaceAvailableULONGLONG8+56+56破棄された部分メッセージの数。
TrailingEdgeSeqIdULONGLONG8+64+64送信ウィンドウ内で最も古いシーケンス識別子。
LeadingEdgeSeqIdULONGLONG8+72+72送信ウィンドウ内で最も新しいシーケンス識別子。
RateKBitsPerSecOverallULONGLONG8+80+80セッション開始時点から内部的に計算された送信レート (キロビット/秒単位)。
RateKBitsPerSecLastULONGLONG8+88+88INTERNAL_RATE_CALCULATION_FREQUENCY で指定された期間における送信レート。
TotalODataPacketsSentULONGLONG8+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)

各言語での定義

#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 Structure
import 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: uint64
struct 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