[Suzaku:00485] Re: suzaku uClinux apacheの質問(不可解な現象)
kyosuke yoshizu
email@hidden
2006年 3月 20日 (月) 18:18:16 JST
yoshizuです
いろいろ調べるためにファイルへのトレースを試みたところ
このトレースファイルが大きくなるにつれ成功する確率が
増えてきました
そこでもしかしたら何か変化するのではと思い thttpd.cの
handle_read()に以下のような100msのSleepを入れて見ました
するとどうでしょう
何回試してもPOSTが成功するのです
ちゃんと標準入力へPOSTデータが渡ります
しかしこのパッチは何の裏づけもないパッチで
理由がわかっていません
予測される原因はなんでしょうか?
もし正式な対処方法があれば一番いいのですが.................
static void
handle_read( connecttab* c, struct timeval* tvP )
{
FILE *fp;
int sz;
ClientData client_data;
/* Is there room in our buffer to read more bytes? */
if ( c->hc.read_idx >= sizeof(c->hc.read_buf) )
{
httpd_send_err( &c->hc, 400, httpd_err400title,
httpd_err400form, "" );
clear_connection( c, tvP );
return;
}
usleep (100000); ★★★★★★ここにsleepをいれた
fp=fopen("/var/tmp/http_read_log","a");
if(fp !=NULL){
fprintf(fp,"handle_read1:%s\n",c->hc.read_buf);
}
fclose(fp);
>> このときIEからのPOSTに対してsuzaku CGIがデータを受信できていないよう
な
>> 障害に悩んでいます
>>
>> Windows CEでなく普通のWindows XPのIEからは問題なく動作します
>>
>> パケットアナライザーでLANのパケットを見たのですが問題が
>> なさそうです
>>
>> uClinuxのApacheにおいてWindows CE/IEからのPOSTを受けれないという
>> ような規格があるようなことはありますでしょうか?
>
>thttpdで作業していると思うのですが、uClinuxの場合問題が一つあります。
>
>uClinuxでは fork()ではなく vfork()を使うのですが、vfork()の場合、子が終
了
>するまで親は動けません。大きなデータをPOSTで処理する場合、これが
>問題になります。
>
>thttpdの libhttpd.cの中で pipe()処理している個所を一時ファイルにしてあ
げると
>大きなデータでも処理できるようになります。
>
>でも、XPのIEでは問題無いのであれば、関係無いかな?
>--
> yashi
>
suzaku メーリングリストの案内