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再送等を含む総送信バイト数である。
NaksReceivedULONGLONG8+16+16受信したNAK(否定応答)の数である。
NaksReceivedTooLateULONGLONG8+24+24遅延して到着したため無効となったNAKの数である。
NumOutstandingNaksULONGLONG8+32+32未処理のNAKの数である。
NumNaksAfterRDataULONGLONG8+40+40再送データ送信後に受信したNAKの数である。
RepairPacketsSentULONGLONG8+48+48送信した修復(再送)パケットの数である。
BufferSpaceAvailableULONGLONG8+56+56送信バッファの利用可能空き容量である。
TrailingEdgeSeqIdULONGLONG8+64+64送信ウィンドウ後端のシーケンスIDである。
LeadingEdgeSeqIdULONGLONG8+72+72送信ウィンドウ先端のシーケンスIDである。
RateKBitsPerSecOverallULONGLONG8+80+80全体の平均送信レートをKビット/秒で示す。
RateKBitsPerSecLastULONGLONG8+88+88直近の送信レートをKビット/秒で示す。
TotalODataPacketsSentULONGLONG8+96+96送信した元データ(オリジナル)パケットの総数である。

各言語での定義

#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