(toppers-users 2387) Re: 連続データストリームの受信について

ykominami ykominami @ nifty.com
2006年 4月 2日 (日) 14:31:55 JST


小南です。

On Sun, 2 Apr 2006 13:20:25 +0900
Noda <dearliz @ jnb.odn.ne.jp> wrote:

> 小南様
> 
> Nodaです。
> 
> > (1)tcp_rcv_dat()から返ってこない
> > (2)wai_sem()から返ってこない
> > (3)受信の無限ループを抜けた(task1()を終了)
> 
> (1)または(2)のどちらかです。syslog()関数を前後に挿入 
> して調べた結果ですが、
> 必ずどちらかで止まるということではないようです。
> 
> (3)は(tcp_rcv_dat()の戻り値が正の値になることは)ありませ 
> んでした。
> 
> > また連続データでなく、外部から1回のみの送信で、送信デー 
> > タのサイズを変えた
> > 場合には、どうなるのでしょうか。
> > さらに上記の場合を、送信回数を2回、3回と増やして 
> > いった場合にはどうなるので
> > しょうか。
> 
> 送信データのサイズを変えるのは難しいです。
> 外部のサーバよりデータを取得しているので。
> 
> 傾向としては、
> 
> ・受信バッファは大きすぎず、少なすぎず
> ・(サーバからの)送信データは少ない(1秒あたりの送信データ数が 
> 少ない)方が
> 
> 止まる確率が低くなるように感じます。

問題点の切り分けとしては、出来るだけ関連する要因を減らして、ひとつずつ
しらべていく方が確実(で結局は早い)なのですが。

現在の状況からすると、ローカルな閉じたネットワークにおいて、TINETで
どれだけのサイズのデータなら安定して受け取れるのかかを確認するほうが
いいのではないかと思います。
プログラムも、コールバックは使わず、単純にtcp_rcv_dat()の繰り返し
呼び出しのみにして(データが受信できなければtcp_rcv_datの中で待ち状態
にします)、送信側が1回のみの送信、2回のみの送信、・・・を送信データ
サイズ、受信バッファサイズを変えながら、受信できるか確認していくほうが
よいのではないでしょうか。

tcp_rcv_datやwai_semから返ってこないというのは、そもそも受け取るべき
データが来ていない場合にも起こり得ると思います。
もしくはハードウェア的に問題が起こっていたり。

この点をさらに確実に調べるためには,tcp_dumpなどでパケットレベルでの
通信状態をみることも必要だと思います。

----------------------------------- 
小南 ykominami @ nifty.com