マイコン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接続無しの状態 */
となることを確認する方法になりますでしょうか?
お手数をおかけして申し訳ありませんが、ご教授のほどよろしくお願いいたします。
TCPIP断線確認
- eForce技術担当
- 記事: 193
- 登録日時: 2014年4月24日(木) 14:18
Re: TCPIP断線確認
返信が遅くなり申し訳ありません。
リンク検出は自マイコンが直接繋がっているLANポートのみ検出可能です。
rcv_soc(), snd_soc() 実行中に切断すると E_CLS、切断後にAPI を呼び出すと E_OBJ が返却されるため、こちらで切断判定可能です。
rcv_soc(), snd_soc() を実行しない場合、上記の ref_soc() で確認されてもよいです。
リンク状態の参照は「Ethernetのリンク状態を参照したい」をご確認下さい。質問なのですがcon_socで接続確立後に、断線(LANケーブルが抜けたなど)を検出する方法はありますでしょうか?
リンク検出は自マイコンが直接繋がっているLANポートのみ検出可能です。
TCP KeepAlive 機能が有効な場合、リモート側と一定時間通信出来なかった場合にTCPコネクションを切断します。現在Keep Alive機能は使用しています。
なのでKeep AliveでTCPコネクションを切断したことを確認することができますでしょうか?
UB sts;
ref_soc(sid, SOC_TCP_STATE, (VP)&sts);
をポーリングさせて
sts = TCP_CLOSED 0x01 /* TCP接続無しの状態 */
となることを確認する方法になりますでしょうか?
rcv_soc(), snd_soc() 実行中に切断すると E_CLS、切断後にAPI を呼び出すと E_OBJ が返却されるため、こちらで切断判定可能です。
rcv_soc(), snd_soc() を実行しない場合、上記の ref_soc() で確認されてもよいです。
Re: TCPIP断線確認
ご回答ありがとうございます。
タスクを一つ占有してrcv_soc()をタイムアウトなしで実施している箇所がありますのでそれの戻り値を確認しE_CLSとなった場合、
切断したことといたします。
タスクを一つ占有してrcv_soc()をタイムアウトなしで実施している箇所がありますのでそれの戻り値を確認しE_CLSとなった場合、
切断したことといたします。