fastcgiでファイルのアップロードとダウンロードを試みています。
sendfile() を使用するには、クライアント (ブラウザー) への Web サーバーのオープン ソケットが必要です。
fastcgi はそれを私に渡しません (私はそうは思いません)。
ブラウザのソケット記述子を取得する方法がわかりません。
また、リダイレクトや新しい接続を開かずに別のアプローチを受け入れることもできます。
助けていただければ幸いです
FastCGI でブラウザーへのソケットを取得しません。直接取得する唯一のソケットは Web サーバーに接続されており、生データだけでなく、FastCGI データ フレームを想定しています。
ファイル ダウンロードの最も一般的な解決策はX-Sendfile ヘッダーsendfile()
です。これは、応答の代わりに (おそらく内部的に何かを使用して) ファイルを吐き出すよう Web サーバーに指示します。Lighttpd によって導入され、nginx によってネイティブにサポートされ、mod_xsendfile を介して Apache によってサポートされます。
ソケットとファイルはほとんど同じように処理されるので、実際のソケットの代わりに標準出力ファイル記述子を出力「ソケット」として使用できることに注意してください。
#include <unistd.h>
int in_fd = open(...);
sendfile(STDOUT_FILENO, in_fd, NULL, length_of_file);