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()関数を実行した際に、コールバック関数の呼ばれる時間が掛かるのか、

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

  • rkshさん
    詳しくはシェルテイさんと思いますが、その事象はありうる事だと思います、途中でLANケーブルを抜いたり、ターミナルを落としたりしたとき、それが通信の実行中と重なった時には、T4ライブラリは一定時間を待つと思いますので、そういうことになると思います、間違いかもしれませんが一応考えられることはそうなります。

  • rkshさん

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

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

    以上です