我正在尝试在fastcgi中上传和下载文件。
要使用sendfile()我需要Web服务器的开放套接字到客户端(浏览器)。
fastcgi没有传递给我(我不认为)。
我对如何获取浏览器的套接字描述符毫无头绪。
我也对另一种没有重定向或打开新连接的方法持开放态度。
帮助表示赞赏
答案 0 :(得分:2)
您没有在FastCGI中获得浏览器的套接字。您直接获得的唯一套接字连接到Web服务器,它期望FastCGI数据帧,而不仅仅是原始数据。
最典型的文件下载解决方案是the X-Sendfile header,它指示Web服务器吐出文件(可能在内部使用sendfile()
),而不是您的响应。它由Lighttpd引入,由nginx本机支持,并由Apache通过mod_xsendfile支持。
答案 1 :(得分:1)
请记住,套接字和文件的处理方式大致相同,因此您可以使用标准输出文件描述符作为输出“socket”而不是真正的套接字:
#include <unistd.h>
int in_fd = open(...);
sendfile(STDOUT_FILENO, in_fd, NULL, length_of_file);