2011/07/24

FastCGI の fwrite の戻り値

 
ネタ切れなので、昔調べた、6年前ぐらいから気になってる技術ネタ。
 
ダウンロードCGI を C/C++言語で作る場合、fwrite で転送してやることで、
現在ダウンロードしているバイト数などをサーバー側で把握できます。
 
FCGI を使うと fwrite/fread などは全て FCGI_Write 等に置換されてしまい、
この挙動が変わってしまうので、ユーザーがダウンロードを完了したかどうか?
というのを判断する材料がありません。
 
また fwrite( const void* … ) という定義も fwrite( void* … ) になって
しまうので、厳格にプログラミングしている人にとっては最悪です。
 
せっかく「この関数の中では変数の中身を変更しないよ!」ってルールで実装
してるのに、fcgi モードでコンパイルすると (void*) でキャストしてやらないと
いけない。
 
安全を考えるのなら、キャストでは無く一時バッファにコピーして渡すべきだけど。
 
 
fcgi のバージョンすら覚えて無いけど、そんな fcgi をまだ現役で使ってます。

0 件のコメント:

コメントを投稿