お世話になります。
WinXP VC++6で、TCPを用いファイル転送し、送信速度、
再送信回数などの通信の評価をするをするプログラムを作成
していますが、winsock2を用いて、再送信の回数を検知
することは可能でしょうか?
また、不可能であったとしたときに、どのような代替手段が
考えられますでしょうか?
ご存知のかたがいらっしゃいましたら、ご教示いただきたく。
よろしくお願いいたします。
個別のソケットごとでの取得方法があるのかは知りませんが
TCP全体での再送回数はnetstat -sで見られるので
何らかの取得方法はあるのでしょうね
iphlpapi。dllの、GetIfTableで、LANカード等のインターフェース情報
から、erroneous packets sent/erroneous packets received から換算
して流用できませんか?
以上。
通りすがり様、オショウ様
情報提供ありがとうございます。
IP HELPER APIを調べてみたところ、GetTcpStatistics()と
いう関数があり、そこからdwRetransSegs(再送信回数)が
得られるようでした。とりあえず、これでやってみようと思います。
とりあえず、解決とします。
オショウ様
おんぶに抱っこで申し訳ないのですが、GetIfTableで換算する
方法というのは、どのように行うのでしょうか?
お迷惑でなかったら、今後のために教えてください。
よろしくお願いいたします。
一般的にLANのインターフェースは、OS上で実行される全ての通信
を一手に引き受けます。
どこの誰べ〜と通信したら、再送が発生したかまで細かく把握すること
は仕様的にできないようです。
ドライバーレベルでもできるのか言われれば、LANドライバーの仕様
性能に依存します。よって、換算と言う意味は、通信にかかる平均的な
時間とLANインターフェース上で発生する再送数を総合的に判断しな
いと、捉えられない(セッションごとに)のではないか・・・と思いま
す。
再送が発生しても、リトライ回数上限に達しないとアプリレベルでは、
最終的なエラーが解りません。どこまでの範囲で再送を良しとするか、
エラーとするか・・・
そういった部分の判断基準をアプリ側で持つのは、かなり難易度の高い
もしくは、難しい問題だと思います。
以上。
オショウ様
お返事ありがとうございます。
ネットワーク系初心者の自分にはちょっと難しい話のようです。
しかし、これから今回と同じような、通信の評価をするような
アプリも開発していくことになりますので、頑張って勉強して
行きたいと思います。
今回はありがとうございました。
ツイート | ![]() |