TCPIP断線確認

弊社TCP/IPプロトコルスタック「μNet3」に関する書込みはこちらにお願いします。
返信する
ymmt
記事: 10
登録日時: 2020年6月10日(水) 16:29

TCPIP断線確認

投稿記事 by ymmt » 2020年6月10日(水) 16:43

マイコン2つにuNet3を乗せています。その2つのマイコンをTCP/IPで接続しています。接続にはHUBを介して接続しています。
質問なのですがcon_socで接続確立後に、断線(LANケーブルが抜けたなど)を検出する方法はありますでしょうか?

現在Keep Alive機能は使用しています。
なのでKeep AliveでTCPコネクションを切断したことを確認することができますでしょうか?

UB sts;
ref_soc(sid, SOC_TCP_STATE, (VP)&sts);
をポーリングさせて
sts = TCP_CLOSED 0x01 /* TCP接続無しの状態 */
となることを確認する方法になりますでしょうか?

お手数をおかけして申し訳ありませんが、ご教授のほどよろしくお願いいたします。

アバター
eForce技術担当
記事: 193
登録日時: 2014年4月24日(木) 14:18

Re: TCPIP断線確認

投稿記事 by eForce技術担当 » 2020年6月30日(火) 16:31

返信が遅くなり申し訳ありません。
質問なのですがcon_socで接続確立後に、断線(LANケーブルが抜けたなど)を検出する方法はありますでしょうか?
リンク状態の参照は「Ethernetのリンク状態を参照したい」をご確認下さい。
リンク検出は自マイコンが直接繋がっているLANポートのみ検出可能です。
現在Keep Alive機能は使用しています。
なのでKeep AliveでTCPコネクションを切断したことを確認することができますでしょうか?

UB sts;
ref_soc(sid, SOC_TCP_STATE, (VP)&sts);
をポーリングさせて
sts = TCP_CLOSED 0x01 /* TCP接続無しの状態 */
となることを確認する方法になりますでしょうか?
TCP KeepAlive 機能が有効な場合、リモート側と一定時間通信出来なかった場合にTCPコネクションを切断します。
rcv_soc(), snd_soc() 実行中に切断すると E_CLS、切断後にAPI を呼び出すと E_OBJ が返却されるため、こちらで切断判定可能です。
rcv_soc(), snd_soc() を実行しない場合、上記の ref_soc() で確認されてもよいです。

ymmt
記事: 10
登録日時: 2020年6月10日(水) 16:29

Re: TCPIP断線確認

投稿記事 by ymmt » 2020年7月13日(月) 10:43

ご回答ありがとうございます。
タスクを一つ占有してrcv_soc()をタイムアウトなしで実施している箇所がありますのでそれの戻り値を確認しE_CLSとなった場合、
切断したことといたします。

返信する