TCPに関する統計情報を取得する
IPHLPAPIのGetTcpStatistics()を使うとTCPに関する統計情報を取得することができます。 ここでは、GetTcpStatistics()の使い方を説明します。
サンプルコード
GetTcpStatistics()を使ったサンプルコードを以下に示します。
#include <stdio.h>
#include <winsock2.h>
#include <iphlpapi.h>
int
main()
{
MIB_TCPSTATS tcpstats;
if (GetTcpStatistics(&tcpstats) == NOERROR) {
printf("dwRtoAlgorithm: %ld\n", tcpstats.dwRtoAlgorithm);
printf("dwRtoMin: %ld\n", tcpstats.dwRtoMin);
printf("dwRtoMax: %ld\n", tcpstats.dwRtoMax);
printf("dwMaxConn: %ld\n", tcpstats.dwMaxConn);
printf("dwActiveOpens: %ld\n", tcpstats.dwActiveOpens);
printf("dwPassiveOpens: %ld\n", tcpstats.dwPassiveOpens);
printf("dwAttemptFails: %ld\n", tcpstats.dwAttemptFails);
printf("dwEstabResets: %ld\n", tcpstats.dwEstabResets);
printf("dwCurrEstab: %ld\n", tcpstats.dwCurrEstab);
printf("dwInSegs: %ld\n", tcpstats.dwInSegs);
printf("dwOutSegs: %ld\n", tcpstats.dwOutSegs);
printf("dwRetransSegs: %ld\n", tcpstats.dwRetransSegs);
printf("dwInErrs: %ld\n", tcpstats.dwInErrs);
printf("dwOutRsts: %ld\n", tcpstats.dwOutRsts);
printf("dwNumConns: %ld\n", tcpstats.dwNumConns);
} else {
printf("GetTcpStatistics failed : %d\n", GetLastError());
}
return 0;
}
サンプルコード実行例
上記コードをコンパイルして出来たものを実行すると、以下のようになります。
C:> a.exe
dwRtoAlgorithm: 4
dwRtoMin: 300
dwRtoMax: 120000
dwMaxConn: -1
dwActiveOpens: 832
dwPassiveOpens: 10
dwAttemptFails: 0
dwEstabResets: 29
dwCurrEstab: 0
dwInSegs: 487549
dwOutSegs: 253735
dwRetransSegs: 0
dwInErrs: 0
dwOutRsts: 71
dwNumConns: 5
GetTcpStatistics()が利用する構造体
GetTcpStatistics()が利用する構造体MIB_TCPSTATSを以下に示します。
typedef struct _MIB_TCPSTATS {
DWORD dwRtoAlgorithm;
DWORD dwRtoMin;
DWORD dwRtoMax;
DWORD dwMaxConn;
DWORD dwActiveOpens;
DWORD dwPassiveOpens;
DWORD dwAttemptFails;
DWORD dwEstabResets;
DWORD dwCurrEstab;
DWORD dwInSegs;
DWORD dwOutSegs;
DWORD dwRetransSegs;
DWORD dwInErrs;
DWORD dwOutRsts;
DWORD dwNumConns;
} MIB_TCPSTATS, *PMIB_TCPSTATS;
dwRtoAlgorithm | RTO(Retransmission Time-Out) Algorithmの種類
|
||||||||
dwRtoMin | RTOの最小値。msec単位です。 | ||||||||
dwRtoMax | RTOの最大値。msec単位です。 | ||||||||
dwMaxConn | 最大コネクション数。-1の場合は可変長です。 | ||||||||
dwActiveOpens | Active Openの数。コネクションを初期化している状態のコネクション数です。 | ||||||||
dwPassiveOpens | Passive Openの数。listenしている状態の数です。 | ||||||||
dwAttemptFails | コネクション確立失敗の数です。 | ||||||||
dwEstabResets | Resetされたコネクションの数です。 | ||||||||
dwCurrEstab | 現在確立されているコネクション数です。 | ||||||||
dwInSegs | 受信したセグメント数です。 | ||||||||
dwOutSegs | 送信したセグメント数です。 | ||||||||
dwRetransSegs | 再送したセグメント数です。 | ||||||||
dwInErrs | 受信したエラーの数です。 | ||||||||
dwOutRsts | RSTフラグが立った状態のセグメントを受け取った数です。 | ||||||||
dwNumConns | 現在ある全てのコネクションの数です。listenしている状態のものはカウントされません。 |