SH7750R T4ライブラリ UDP通信について

いつもお世話になります。

CPU:SH7750Rを使用して、UDP通信の送受信ソフトウェアを作成しており

UDP通信部はT4ライブラリを使用してプログラムを実装いたしました。

UDPのプログラムはサンプルソースコードの通り、コールバック関数を利用して

文字列の送信プログラムを作成いたしました。(1000byte:100ms)

そこでお伺いしたいことが有り、UDPの送信を定周期(100ms)で行っており

udp_snd_dat()関数を実行。TMO_NBLKを指定。

接続先のタームソフトで文字列が正しく送られているのは確認が出来ましたが、

その後、LANケーブルを抜いたり、またタームソフトを落とすと

CPUの動作が重くなる事象が発生しました(デバッガー等で調査を行うと、udp_snd_dat()関数を実行した後に、

相手のタームソフト等でモニタしているときは関数実行後即座にコールバック関数が呼ばれていたのが、LANケーブル切断や

タームソフト終了を行っている状態で、udp_snd_dat()関数を実行すると関数自体は即座に実行されるのにコールバック関数が

呼ばれるのが3~4秒程度処理がかかる事象を見つけました)

 

UDP通信(WireShark)で確認すると接続処理や切断処理、3ハンドシェイクも行わない為、なぜLANケーブルを抜いていた状態で

コールバック関数呼び出しのudp_snd_dat()関数を実行した際に、コールバック関数の呼ばれる時間が掛かるのか、

もし誰か分かりましたらご連絡宜しくお願い致します。

Parents
  • rkshさん

    シェルティです、こんにちは。

    この現象ですが、ARP解決がタイムアウトするまでの時間に起因しているようですね。
    UDPはIPの上位プロトコルでして、今回のようにIP層での処理で完了が待たされるケースがあります。
    LANケーブルが接続されているとARPが速やかに完了するため続いて完了コールバックされますが、
    LANケーブルが切断されているとARPの再送が発生し、完了コールバックにしばらく時間がかかります。

    以上です
Reply
  • rkshさん

    シェルティです、こんにちは。

    この現象ですが、ARP解決がタイムアウトするまでの時間に起因しているようですね。
    UDPはIPの上位プロトコルでして、今回のようにIP層での処理で完了が待たされるケースがあります。
    LANケーブルが接続されているとARPが速やかに完了するため続いて完了コールバックされますが、
    LANケーブルが切断されているとARPの再送が発生し、完了コールバックにしばらく時間がかかります。

    以上です
Children
No Data