- PR -

POSTデータが全て受け取れない

1
投稿者投稿内容
yuu
大ベテラン
会議室デビュー日: 2002/06/12
投稿数: 152
お住まい・勤務地: 美味しいケーキ店のそば
投稿日時: 2002-11-27 14:37
おつかれさまです。
今 開発しているシステム(Linux+Perl)で困った事が起きています。どなたか、同じような経験をした方はいませんか?

普通、Perl で作られた CGI がPOST データを受け取る場合、

$len = read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});

のようにコーディングしていると思いますが、ある特定の お客様のところで たまに 読み込まれたデータの長さ $len が $ENV{'CONTENT_LENGTH'} に較べ小さいのです。

apache の access_log を見たところ、この時に POST されたデータ長 は $ENV{'CONTENT_LENGTH'} + α なので、apache まではデータが来ているようです。

apache のソースを見てみると apache と CGI は pipe で通信しているようですが、pipe からの read は リクエストした長さ分を受信する前に戻る事があるのでしょうか??
(socket からの read では ありますよね)
だとすると、 上のよなコーディングでは まずい気もしますが、CGI.pm 等の実績がありそうなモジュールでも そうなっていました。
また perl のソースをざっと見たかんじでは perl の read 関数は unix の fread() を そのまま呼び出しています。。。

環境は
Linux : RedHat 7.2 (2.4.7-10)
Apache : 1.3.20
Perl : v5.6.0


宜しくお願います
_________________
ユゥミ ♪♪
1

スキルアップ/キャリアアップ(JOB@IT)