2

我正在尝试在 fastcgi 中进行文件上传和下载。

要使用 sendfile(),我需要 Web 服务器到客户端(浏览器)的打开套接字。

fastcgi 没有把它传给我(我不认为)。

我对如何获取浏览器的套接字描述符一无所知。

我也对另一种方法持开放态度,无需重定向或打开新连接。

帮助表示赞赏

4

2 回答 2

2

您没有在 FastCGI 中获得到浏览器的套接字。您直接获得的唯一套接字连接到 Web 服务器,它需要 FastCGI 数据帧,而不仅仅是原始数据。

文件下载最典型的解决方案是X-Sendfile 标头,它指示 Web 服务器吐出一个文件(可能使用类似sendfile()内部的东西)而不是您的响应。它由 Lighttpd 引入,由 nginx 原生支持,并由 Apache 通过 mod_xsendfile 支持。

于 2012-05-25T01:04:48.377 回答
1

请记住,套接字和文件的处理方式大多相同,因此您可以使用标准输出文件描述符作为输出“套接字”而不是真正的套接字:

#include <unistd.h>

int in_fd = open(...);

sendfile(STDOUT_FILENO, in_fd, NULL, length_of_file);
于 2012-05-25T05:12:37.840 回答