• 締切済み

ソケット通信の送受信遅延

MFCのCAsyncSockを使ってクライアントとサーバでメッセージの送受信をしています サーバからsend()でメッセージを送信し クライアントはOnReceive()の中でreceive()し メッセージを受信後、応答をsend()で返信します これを10msec間隔で行っているのですが ランダムに送信か受信で300msec前後の遅延が発生します なぜでしょうか? ちなみにソケットオプションで「TCP_NODELAY」を設定しています かなり困っています 気になることでも何でもいいので是非アドバイスをお願いします

みんなの回答

  • MASATO3
  • ベストアンサー率60% (27/45)
回答No.2

・輻輳が発生している(推測) ・TCPスタック内の受信バッファが一杯になってしまっている(推測) ・TCPスタック内でバッファ断片化対応など何か処理をしている(いい加減な推測) ・他のアプリケーションが何かしている(かなりいい加減な推測) など色々考えられます。 WinDumpあたりの解析ツールを使ってパケットを解析すれば、通信経路で遅延が起きているのか、それとも通信経路以外で遅延が起きているのかは絞り込めるでしょう。 でもTCPもUDPも一定時間以内に相手に届くことが保証されていないので、300msec位でしたら遅れてもなんら不思議はありませんし、何かが悪いとも思えません。普通の動作に思えます。遅延の発生を前提に設計するのが良いのではないかと思います。

sakaige32
質問者

お礼

いろいろな可能性を推測していただきありがとうございます。少し希望が見えてきました。

すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4903/10364)
回答No.1

遅延の頻度がわかりませんが、たまに起こる0.3秒程度の遅延を気にするということは、同一サブネットでその2台のみが接続されているor他のホストはその2台に対して全く通信していないというような状況でしょうか? ノイズもしくはハブの不良でIPレベルで再送が起こっているのではないでしょうか?ハブを交換してみるとか、クロスケーブルで直結してみるとか。 ハブは不良品で無いとしても高温とか電圧変動に弱いです。

sakaige32
質問者

補足

>遅延の頻度がわかりませんが、たまに起こる0.3秒程度の遅延を気にするということは、同一サブネットでその2台のみが接続されているor他のホストはその2台に対して全く通信していないというような状況でしょうか? P2Pでクロスケーブルで接続しています。 ノイズもしくはハブの不良でIPレベルで再送が起こっているのではないでしょうか?ハブを交換してみるとか、クロスケーブルで直結してみるとか。 ハブは不良品で無いとしても高温とか電圧変動に弱いです。

すると、全ての回答が全文表示されます。

関連するQ&A