(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
-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-<->-