ホーム › 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 | 再送等を含む総送信バイト数である。 |
| NaksReceived | ULONGLONG | 8 | +16 | +16 | 受信したNAK(否定応答)の数である。 |
| NaksReceivedTooLate | ULONGLONG | 8 | +24 | +24 | 遅延して到着したため無効となったNAKの数である。 |
| NumOutstandingNaks | ULONGLONG | 8 | +32 | +32 | 未処理のNAKの数である。 |
| NumNaksAfterRData | ULONGLONG | 8 | +40 | +40 | 再送データ送信後に受信したNAKの数である。 |
| RepairPacketsSent | ULONGLONG | 8 | +48 | +48 | 送信した修復(再送)パケットの数である。 |
| BufferSpaceAvailable | ULONGLONG | 8 | +56 | +56 | 送信バッファの利用可能空き容量である。 |
| TrailingEdgeSeqId | ULONGLONG | 8 | +64 | +64 | 送信ウィンドウ後端のシーケンスIDである。 |
| LeadingEdgeSeqId | ULONGLONG | 8 | +72 | +72 | 送信ウィンドウ先端のシーケンスIDである。 |
| RateKBitsPerSecOverall | ULONGLONG | 8 | +80 | +80 | 全体の平均送信レートをKビット/秒で示す。 |
| RateKBitsPerSecLast | ULONGLONG | 8 | +88 | +88 | 直近の送信レートをKビット/秒で示す。 |
| TotalODataPacketsSent | ULONGLONG | 8 | +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 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