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

Noda dearliz @ jnb.odn.ne.jp
2006年 4月 1日 (土) 12:24:33 JST


小南様

Nodaです。
レスありがとうございます。
文面が解りにくくて申し訳ありません。以下、本文引用させていただき 
回答いたします。


> 連続ストリームの受信というのが、具体的にどういう処理を意図され 
> ているのかが
> 分かりません。

MP3データストリームの受信です。
インターネットラジオのようなものだと思っていただければ良いと思い 
ます。

> Nodaさんの文面から、システムから意図した動作を示さない、あるい 
> はシステム
> からの反応が得られないという状態なのかなと推測したのですが、そ 
> うなのでしょう
> か。

以下のようなタスクを作って動作させると、wai_sem()を何度か 
(2〜3回だったり、5〜6回だったり不定です)
呼んだ後に停止してしまいます。いわゆる「printfデバッグ」を 
行なっているので、はっきりしたことは解らないのですが、
たぶんtcp_rcv_dat()から戻ってこないのでは?と思われます。

(タスクとは別に1秒間隔の周期ハンドラを動作させているのですが、 
それは動いています。)


void task1( VP_INT exinf )
{
   #define BUFF_SIZE 8192
   UB buffer[BUFF_SIZE];
  UW buf_size = BUFF_SIZE;

   for ( ;; )
   {
    ercd = tcp_rcv_dat( cepid, (VP)buffer, buf_size, TMO_NBLK );

    if ( ercd != E_WBLK || ercd == 0 )
    {
      break;
    }

    syscall(wai_sem(SEM_STREAM));
  }
}

TCP_CFG_TRACEを有効にしてトレースログを出力してみると、
以下のようになっていました。(一部抜粋)

<I=   33.0=c: 1 s:ES f:0000:--A---- a:       144 s:     35962 w: 4096  
l:1408==
<I=   33.0=c: 1 s:ES f:0201:--A---- a:       144 s:     43002 w: 4096  
l:1152==
=O=   33.0=c: 1 s:ES f:0001:--A---- s:       144 a:     38778 w: 8192  
l:   0=>
<I=   33.3=c: 1 s:ES f:0000:--A---- a:       144 s:     44154 w: 4096  
l:1408==
<I=   33.3=c: 1 s:ES f:0201:--A---- a:       144 s:     45562 w: 4096  
l:1408==
<I=   33.4=c: 1 s:ES f:0201:--A---- a:       144 s:      4602 w: 4096  
l:1408==
<I=   33.4=c: 1 s:ES f:0201:--A---- a:       144 s:      6010 w: 4096  
l:1408==
<I=   33.4=c: 1 s:ES f:0201:--A---- a:       144 s:     44154 w: 4096  
l:1408==
<I=   33.5=c: 1 s:ES f:0201:--A---- a:       144 s:     45562 w: 4096  
l:1408==
<I=   33.5=c: 1 s:ES f:0201:--A---- a:       144 s:      4602 w: 4096  
l:1408==
<I=   33.5=c: 1 s:ES f:0201:--A---- a:       144 s:      6010 w: 4096  
l:1408==
=O=   33.6=c: 1 s:ES f:0001:--A---- s:       144 a:     38778 w: 8192  
l:   0=>
<I=   34.8=c: 1 s:ES f:0000:--A---- a:       144 s:     38778 w: 4096  
l:1408==
<I=   34.9=c: 1 s:ES f:0201:--A---- a:       144 s:     45562 w: 4096  
l:1408==
<I=   34.9=c: 1 s:ES f:0201:--A---- a:       144 s:      4602 w: 4096  
l:1408==
<I=   34.9=c: 1 s:ES f:0201:--A---- a:       144 s:      6010 w: 4096  
l:1408==
=O=   35.0=c: 1 s:ES f:0001:--A---- s:       144 a:     41594 w: 8192  
l:   0=>
<I=   35.2=c: 1 s:ES f:0000:--A---- a:       144 s:     46970 w: 4096  
l:   0==
<I=   35.2=c: 1 s:ES f:0200:--A---- a:       144 s:     46970 w: 4096  
l:   0==
<I=   35.3=c: 1 s:ES f:0200:--A---- a:       144 s:     46970 w: 4096  
l:   0==
<I=   35.3=c: 1 s:ES f:0200:--A---- a:       144 s:     46970 w: 4096  
l:   0==
<I=   35.4=c: 1 s:ES f:0000:--A---- a:       144 s:     46970 w: 4096  
l:   0==
<I=   35.4=c: 1 s:ES f:0000:--A---- a:       144 s:     46970 w: 4096  
l:   0==
<I=   35.5=c: 1 s:ES f:0000:--A---- a:       144 s:     46970 w: 4096  
l:   0==
<I=   35.6=c: 1 s:ES f:0000:--A---- a:       144 s:     46970 w: 4096  
l:   0==
<I=   35.7=c: 1 s:ES f:0000:--A---- a:       144 s:     46970 w: 4096  
l:   0==
<I=   35.7=c: 1 s:ES f:0000:--A---- a:       144 s:     46970 w: 4096  
l:   0==
<I=   35.9=c: 1 s:ES f:0000:--A---- a:       144 s:     46970 w: 4096  
l:   0==
<I=   35.9=c: 1 s:ES f:0000:--A---- a:       144 s:     46970 w: 4096  
l:   0==

<-ここで停止


受信バッファは8192バイト用意しています。