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

RM_RECEIVER_STATS

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

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

フィールド

フィールドサイズx64x86説明
NumODataPacketsReceivedULONGLONG8+0+0受信した元データ(オリジナル)パケット数である。
NumRDataPacketsReceivedULONGLONG8+8+8受信した修復(再送)データパケット数である。
NumDuplicateDataPacketsULONGLONG8+16+16受信した重複データパケット数である。
DataBytesReceivedULONGLONG8+24+24受信したデータバイト数の累計である。
TotalBytesReceivedULONGLONG8+32+32総受信バイト数である。
RateKBitsPerSecOverallULONGLONG8+40+40全体の平均受信レートをKビット/秒で示す。
RateKBitsPerSecLastULONGLONG8+48+48直近の受信レートをKビット/秒で示す。
TrailingEdgeSeqIdULONGLONG8+56+56受信ウィンドウ後端のシーケンスIDである。
LeadingEdgeSeqIdULONGLONG8+64+64受信ウィンドウ先端のシーケンスIDである。
AverageSequencesInWindowULONGLONG8+72+72ウィンドウ内のシーケンス平均数である。
MinSequencesInWindowULONGLONG8+80+80ウィンドウ内のシーケンス最小数である。
MaxSequencesInWindowULONGLONG8+88+88ウィンドウ内のシーケンス最大数である。
FirstNakSequenceNumberULONGLONG8+96+96最初のNAK対象シーケンス番号である。
NumPendingNaksULONGLONG8+104+104送信待ちのNAK数である。
NumOutstandingNaksULONGLONG8+112+112応答待ちの未処理NAK数である。
NumDataPacketsBufferedULONGLONG8+120+120バッファに保持しているデータパケット数である。
TotalSelectiveNaksSentULONGLONG8+128+128送信した選択的NAKの総数である。
TotalParityNaksSentULONGLONG8+136+136送信したパリティNAKの総数である。

各言語での定義

#include <windows.h>

// RM_RECEIVER_STATS  (x64 144 / x86 144 バイト)
typedef struct RM_RECEIVER_STATS {
    ULONGLONG NumODataPacketsReceived;
    ULONGLONG NumRDataPacketsReceived;
    ULONGLONG NumDuplicateDataPackets;
    ULONGLONG DataBytesReceived;
    ULONGLONG TotalBytesReceived;
    ULONGLONG RateKBitsPerSecOverall;
    ULONGLONG RateKBitsPerSecLast;
    ULONGLONG TrailingEdgeSeqId;
    ULONGLONG LeadingEdgeSeqId;
    ULONGLONG AverageSequencesInWindow;
    ULONGLONG MinSequencesInWindow;
    ULONGLONG MaxSequencesInWindow;
    ULONGLONG FirstNakSequenceNumber;
    ULONGLONG NumPendingNaks;
    ULONGLONG NumOutstandingNaks;
    ULONGLONG NumDataPacketsBuffered;
    ULONGLONG TotalSelectiveNaksSent;
    ULONGLONG TotalParityNaksSent;
} RM_RECEIVER_STATS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RM_RECEIVER_STATS
{
    public ulong NumODataPacketsReceived;
    public ulong NumRDataPacketsReceived;
    public ulong NumDuplicateDataPackets;
    public ulong DataBytesReceived;
    public ulong TotalBytesReceived;
    public ulong RateKBitsPerSecOverall;
    public ulong RateKBitsPerSecLast;
    public ulong TrailingEdgeSeqId;
    public ulong LeadingEdgeSeqId;
    public ulong AverageSequencesInWindow;
    public ulong MinSequencesInWindow;
    public ulong MaxSequencesInWindow;
    public ulong FirstNakSequenceNumber;
    public ulong NumPendingNaks;
    public ulong NumOutstandingNaks;
    public ulong NumDataPacketsBuffered;
    public ulong TotalSelectiveNaksSent;
    public ulong TotalParityNaksSent;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RM_RECEIVER_STATS
    Public NumODataPacketsReceived As ULong
    Public NumRDataPacketsReceived As ULong
    Public NumDuplicateDataPackets As ULong
    Public DataBytesReceived As ULong
    Public TotalBytesReceived As ULong
    Public RateKBitsPerSecOverall As ULong
    Public RateKBitsPerSecLast As ULong
    Public TrailingEdgeSeqId As ULong
    Public LeadingEdgeSeqId As ULong
    Public AverageSequencesInWindow As ULong
    Public MinSequencesInWindow As ULong
    Public MaxSequencesInWindow As ULong
    Public FirstNakSequenceNumber As ULong
    Public NumPendingNaks As ULong
    Public NumOutstandingNaks As ULong
    Public NumDataPacketsBuffered As ULong
    Public TotalSelectiveNaksSent As ULong
    Public TotalParityNaksSent As ULong
End Structure
import ctypes
from ctypes import wintypes

class RM_RECEIVER_STATS(ctypes.Structure):
    _fields_ = [
        ("NumODataPacketsReceived", ctypes.c_ulonglong),
        ("NumRDataPacketsReceived", ctypes.c_ulonglong),
        ("NumDuplicateDataPackets", ctypes.c_ulonglong),
        ("DataBytesReceived", ctypes.c_ulonglong),
        ("TotalBytesReceived", ctypes.c_ulonglong),
        ("RateKBitsPerSecOverall", ctypes.c_ulonglong),
        ("RateKBitsPerSecLast", ctypes.c_ulonglong),
        ("TrailingEdgeSeqId", ctypes.c_ulonglong),
        ("LeadingEdgeSeqId", ctypes.c_ulonglong),
        ("AverageSequencesInWindow", ctypes.c_ulonglong),
        ("MinSequencesInWindow", ctypes.c_ulonglong),
        ("MaxSequencesInWindow", ctypes.c_ulonglong),
        ("FirstNakSequenceNumber", ctypes.c_ulonglong),
        ("NumPendingNaks", ctypes.c_ulonglong),
        ("NumOutstandingNaks", ctypes.c_ulonglong),
        ("NumDataPacketsBuffered", ctypes.c_ulonglong),
        ("TotalSelectiveNaksSent", ctypes.c_ulonglong),
        ("TotalParityNaksSent", ctypes.c_ulonglong),
    ]
#[repr(C)]
pub struct RM_RECEIVER_STATS {
    pub NumODataPacketsReceived: u64,
    pub NumRDataPacketsReceived: u64,
    pub NumDuplicateDataPackets: u64,
    pub DataBytesReceived: u64,
    pub TotalBytesReceived: u64,
    pub RateKBitsPerSecOverall: u64,
    pub RateKBitsPerSecLast: u64,
    pub TrailingEdgeSeqId: u64,
    pub LeadingEdgeSeqId: u64,
    pub AverageSequencesInWindow: u64,
    pub MinSequencesInWindow: u64,
    pub MaxSequencesInWindow: u64,
    pub FirstNakSequenceNumber: u64,
    pub NumPendingNaks: u64,
    pub NumOutstandingNaks: u64,
    pub NumDataPacketsBuffered: u64,
    pub TotalSelectiveNaksSent: u64,
    pub TotalParityNaksSent: u64,
}
import "golang.org/x/sys/windows"

type RM_RECEIVER_STATS struct {
	NumODataPacketsReceived uint64
	NumRDataPacketsReceived uint64
	NumDuplicateDataPackets uint64
	DataBytesReceived uint64
	TotalBytesReceived uint64
	RateKBitsPerSecOverall uint64
	RateKBitsPerSecLast uint64
	TrailingEdgeSeqId uint64
	LeadingEdgeSeqId uint64
	AverageSequencesInWindow uint64
	MinSequencesInWindow uint64
	MaxSequencesInWindow uint64
	FirstNakSequenceNumber uint64
	NumPendingNaks uint64
	NumOutstandingNaks uint64
	NumDataPacketsBuffered uint64
	TotalSelectiveNaksSent uint64
	TotalParityNaksSent uint64
}
type
  RM_RECEIVER_STATS = record
    NumODataPacketsReceived: UInt64;
    NumRDataPacketsReceived: UInt64;
    NumDuplicateDataPackets: UInt64;
    DataBytesReceived: UInt64;
    TotalBytesReceived: UInt64;
    RateKBitsPerSecOverall: UInt64;
    RateKBitsPerSecLast: UInt64;
    TrailingEdgeSeqId: UInt64;
    LeadingEdgeSeqId: UInt64;
    AverageSequencesInWindow: UInt64;
    MinSequencesInWindow: UInt64;
    MaxSequencesInWindow: UInt64;
    FirstNakSequenceNumber: UInt64;
    NumPendingNaks: UInt64;
    NumOutstandingNaks: UInt64;
    NumDataPacketsBuffered: UInt64;
    TotalSelectiveNaksSent: UInt64;
    TotalParityNaksSent: UInt64;
  end;
const RM_RECEIVER_STATS = extern struct {
    NumODataPacketsReceived: u64,
    NumRDataPacketsReceived: u64,
    NumDuplicateDataPackets: u64,
    DataBytesReceived: u64,
    TotalBytesReceived: u64,
    RateKBitsPerSecOverall: u64,
    RateKBitsPerSecLast: u64,
    TrailingEdgeSeqId: u64,
    LeadingEdgeSeqId: u64,
    AverageSequencesInWindow: u64,
    MinSequencesInWindow: u64,
    MaxSequencesInWindow: u64,
    FirstNakSequenceNumber: u64,
    NumPendingNaks: u64,
    NumOutstandingNaks: u64,
    NumDataPacketsBuffered: u64,
    TotalSelectiveNaksSent: u64,
    TotalParityNaksSent: u64,
};
type
  RM_RECEIVER_STATS {.bycopy.} = object
    NumODataPacketsReceived: uint64
    NumRDataPacketsReceived: uint64
    NumDuplicateDataPackets: uint64
    DataBytesReceived: uint64
    TotalBytesReceived: uint64
    RateKBitsPerSecOverall: uint64
    RateKBitsPerSecLast: uint64
    TrailingEdgeSeqId: uint64
    LeadingEdgeSeqId: uint64
    AverageSequencesInWindow: uint64
    MinSequencesInWindow: uint64
    MaxSequencesInWindow: uint64
    FirstNakSequenceNumber: uint64
    NumPendingNaks: uint64
    NumOutstandingNaks: uint64
    NumDataPacketsBuffered: uint64
    TotalSelectiveNaksSent: uint64
    TotalParityNaksSent: uint64
struct RM_RECEIVER_STATS
{
    ulong NumODataPacketsReceived;
    ulong NumRDataPacketsReceived;
    ulong NumDuplicateDataPackets;
    ulong DataBytesReceived;
    ulong TotalBytesReceived;
    ulong RateKBitsPerSecOverall;
    ulong RateKBitsPerSecLast;
    ulong TrailingEdgeSeqId;
    ulong LeadingEdgeSeqId;
    ulong AverageSequencesInWindow;
    ulong MinSequencesInWindow;
    ulong MaxSequencesInWindow;
    ulong FirstNakSequenceNumber;
    ulong NumPendingNaks;
    ulong NumOutstandingNaks;
    ulong NumDataPacketsBuffered;
    ulong TotalSelectiveNaksSent;
    ulong TotalParityNaksSent;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RM_RECEIVER_STATS サイズ: 144 バイト(x64)
dim st, 36    ; 4byte整数×36(構造体サイズ 144 / 4 切り上げ)
; NumODataPacketsReceived : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; NumRDataPacketsReceived : ULONGLONG (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; NumDuplicateDataPackets : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; DataBytesReceived : ULONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; TotalBytesReceived : ULONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; RateKBitsPerSecOverall : ULONGLONG (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; RateKBitsPerSecLast : ULONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; TrailingEdgeSeqId : ULONGLONG (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; LeadingEdgeSeqId : ULONGLONG (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; AverageSequencesInWindow : ULONGLONG (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; MinSequencesInWindow : ULONGLONG (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; MaxSequencesInWindow : ULONGLONG (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; FirstNakSequenceNumber : ULONGLONG (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; NumPendingNaks : ULONGLONG (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; NumOutstandingNaks : ULONGLONG (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; NumDataPacketsBuffered : ULONGLONG (+120, 8byte)  qpoke st,120,値 / qpeek(st,120)  ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; TotalSelectiveNaksSent : ULONGLONG (+128, 8byte)  qpoke st,128,値 / qpeek(st,128)  ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; TotalParityNaksSent : ULONGLONG (+136, 8byte)  qpoke st,136,値 / qpeek(st,136)  ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global RM_RECEIVER_STATS
    #field int64 NumODataPacketsReceived
    #field int64 NumRDataPacketsReceived
    #field int64 NumDuplicateDataPackets
    #field int64 DataBytesReceived
    #field int64 TotalBytesReceived
    #field int64 RateKBitsPerSecOverall
    #field int64 RateKBitsPerSecLast
    #field int64 TrailingEdgeSeqId
    #field int64 LeadingEdgeSeqId
    #field int64 AverageSequencesInWindow
    #field int64 MinSequencesInWindow
    #field int64 MaxSequencesInWindow
    #field int64 FirstNakSequenceNumber
    #field int64 NumPendingNaks
    #field int64 NumOutstandingNaks
    #field int64 NumDataPacketsBuffered
    #field int64 TotalSelectiveNaksSent
    #field int64 TotalParityNaksSent
#endstruct

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