CGIのプログラムの途中でHTMLを返すことはできないのでしょうか?

[上に] [前に] [次に]
すずちゅー [E-Mail] 1998/04/30(木) 19:33:39
CGI(UNIX,C言語)で、HTMLで「処理を受け付けました」
と表示するだけで、</HTML>の後にその処理をしてい
ると、「Internal Server Error」(タイムアウト?)というエ
ラーになってしまいます。
どうやらプログラムが終了するまで、クライアントにHTMLを返さないようなのですが、プログラムの途中で
HTMLを返すことはできないのでしょうか?

B-Cus 1998/04/30(木) 21:53:58
int main(){
  printf("Content-type: text/html\n\n");
  printf("<html><body>test ok.</body></html>\n");
  fclose(stdout);
  sleep(100);
}
とすると100秒待たされませんでした。あるいはforkして親プロセスは
すぐに終了し、子プロセスに後始末をお願いするとか。

飯塚 1998/04/30(木) 22:15:58
int main(){
  printf("Content-type: text/html\n\n");
  printf("<html><body>test ok.</body></html>\n");
  fflush(stdout);
  sleep(100);
  fclose(stdout);
}
というのはどう?

B-Cus 1998/04/30(木) 22:50:13
> というのはどう?

これだとうちの環境(apache+{Linux,Solaris})では100秒待たされました。

飯塚 [E-Mail] [HomePage] 1998/05/02(土) 02:04:30
>> というのはどう?
>これだとうちの環境(apache+{Linux,Solaris})では100秒待たされました。

ああっ。たしかに待たされてしまいます(apache以外+Solaris)。
この方法で僕は「リアルタイムにスクロールしながら処理をするCGI」
(http://www.broadway.or.jp/~siizuka/cgi-bin/wbpop.cgi)を
作ったことがあるのですが、書き出す量がある程度無くてはうまくスクロール
しないのかもしれませんね。
やはりB-Cusさんの方法が一番いいみたいです。

とほほ 1998/05/03(日) 00:27:25
画面への表示は fflush() でも行われることがありますが、文書の
終了は close() で判断されるようですね。で、終了前に、一定時間
以上書き込みが無いと、タイムアウトとなるようです。

すずちゅー [E-Mail] 1998/05/06(水) 10:52:03
[[解決]]
B-Cusさん、飯塚さん、とほほさん、
貴重なご意見ありがとうございました。
私の問題は、
「fclose(stdout); 」
を入れることで解決いたしました。
これからも、よろしくお願いします。

[上に] [前に] [次に]