(toppers-users 2918) Re: TINET による PPP 接続時の切断について
Manabu Tanabe
m_tanabe @ na.rim.or.jp
2009年 4月 3日 (金) 16:29:53 JST
阿部 様
田辺@名古屋です。
いつもお世話になっております。
> > 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() を使わないといけない?
>
> サンプルプログラムの nserv 等では、特に問題はありませんが、
> サーバの設定なのでしょうか
> TRACE を有効にして、TCP のセグメントの送受信を見るのも有効かもしれません。
> TRACE については、tinet.pdf の 19ページ
>
> 「5.6 TCP ヘッダのトレース出力機能」
>
> を参照してください。
TCP ヘッダのトレースをしてみました。結果、
<初回接続時>
=O 1.385=c: 1 s:SS f:02000:-----S- s: 344690855 a: 0 w: 512 l: 0>
=O 53.099=c: 1 s:SS f:02000:-----S- s: 344690855 a: 0 w: 512 l: 0>
<I 53.476=c: 1 s:SS f:02000:--A--S- a: 344690856 s:5434720702 w:64240 l: 0=
=O 53.530=c: 1 s:ES f:02001:--A---- s: 1 a: 1 w: 512 l: 0>
<I 53.974=c: 1 s:ES f:02000:--AP--- a: 1 s: 1 w:64240 l: 33=
=O 54.036=c: 1 s:ES f:02002:--AP--- s: 1 a: 34 w: 512 l: 19>
<I 54.457=c: 1 s:ES f:02000:--A---- a: 20 s: 34 w:64240 l: 0=
<I 54.652=c: 1 s:ES f:02000:--AP--- a: 20 s: 34 w:64240 l: 104=
<2回目接続時>
=O 74.014=c: 1 s:SS f:02000:-----S- s: 358593605 a: 0 w: 512 l: 0>
=O 166.706=c: 1 s:SS f:02001:-----S- s: 358593605 a: 0 w: 512 l: 0>
=O 230.706=c: 1 s:SS f:02001:-----S- s: 358593605 a: 0 w: 512 l: 0>
となりました。2回目の最初のパケットは通信端点の状態が 0x02000 ですが、
ダイアル後、送信される時は 0x02001 になっています。この辺が原因でしょうか?
また、折角乱数?で初期化したと思われるシーケンス番号が
途中でリセットされています。正しくは、
=O 1.385=c: 1 s:SS f:02000:-----S- s: 344690855 a: 0 w: 512 l: 0>
=O 53.099=c: 1 s:SS f:02000:-----S- s: 344690855 a: 0 w: 512 l: 0>
<I 53.476=c: 1 s:SS f:02000:--A--S- a: 344690856 s:5434720702 w:64240 l: 0=
=O 53.530=c: 1 s:ES f:02001:--A---- s: 344690856 a:5434720703 w: 512 l: 0>
と続くはずなのではないですか?
リセットしてもいいという仕様が有ったらすいません。。。
以上、よろしくお願いいたします。
-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-
E-mail : m_tanabe @ na.rim.or.jp
-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-