(toppers-users 2912) Re: TINET による PPP 接続時の切断について

Manabu Tanabe m_tanabe @ na.rim.or.jp
2009年 4月 1日 (水) 16:42:57 JST


 阿部 様

 田辺@名古屋です。

 お世話になっております。
お忙しいところ、御返信いただき有難う御座います。

> >  (PPP と)モデムの接続を、最も理にかなった方法で切断して電話を切る処理を
> > 御伝授頂けないでしょうか? 下記に SYSYLOG を添付させていただきます。
> > 現在は、単に tcp_sht_cep() と tcp_cls_cep() を呼び出しているだけです。
> 
> TCP を切断しても、LCP (PPP) レベルでは接続状態ですので、
> lcp_close() を呼び出す必要があると思います。
> tinet/netapp/dbg_cons.c の 1884 行目付近のコードを参考にしてください。

 lcp_close() を呼び出すだけでよかったんですね。。。
早速、試してみました。結果、無事、切断処理をしてくれました。
有難う御座いました。
通常、lcp_close() は誰が呼び出すように設計されているのでしょう・・・。



 もう少し甘えさせてください。あと1件、問題があります。
お時間の許す限りで結構ですので、御享受いただけると幸いです。

1.再接続すると TCP の通信が出来ない

 tcp_sht_cep() と tcp_cls_cep() で閉じたソケットと同じ ID で
再度、tcp_con_cep() を用いて接続しようとすると、
モデムは再発信を行い、PPP の接続までは完了しているようなのですが、
tcp_con_cep() から制御が戻ってきません。何故でしょう?

 シーケンスの流れとしては、

・TCP_CRE_CEP() で受付口の作成
・tcp_con_cep(TMO_FEVR) でサーバに接続
・接続後、tcp_snd_dat(TMO_FEVR)、tcp_rcv_dat(TMO_FEVR) で通信
・tcp_sht_cep(TMO_FEVR) でデータ送信終了
・tcp_cls_cep(TMO_FEVR) で通信端点のクローズ
・tcp_con_cep(TMO_FEVR) でサーバに再接続 ← ここで制御が戻ってこない

 tcp_con_cep() 関数中の、
	error = twai_flg(cep->est_flgid, (CEP_EVT_CLOSED |
			CEP_EVT_ESTABLISHED), TWF_ORW, &flag, tmout);
でブロックされているようです。

 もしや、tcp_con_cep() を呼び出してはいけない?
若しくは、動的 APIの tcp_cre_cep() を使わないといけない?

2.パケットの喪失・順番の相違が発生する

 PPP で SMTP サーバに接続し、メールを送っているのですが、
一部、送ったデータの順番が代わっていたり、データが喪失してしまっているようです。
同じプログラムを数回繰り返してもサーバ側での受信結果が同じ内容になるので、
私の使い方に問題がありそうなのですが、見落としがちな点などは無いでしょうか?
送受信バッファのサイズを変更すると、受信側の様子がわかるので、
バッファの内容を壊してしまっているようにも見えなくも無いのですが・・・。

 以上、よろしくお願いいたします。

-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-
 E-mail  : m_tanabe @ na.rim.or.jp
-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-