如何在fastcgi中获取sendfile()的浏览器套接字? (在C中)

时间:2012-05-24 23:55:04

标签: c sockets fastcgi sendfile

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

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

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

我对如何获取浏览器的套接字描述符毫无头绪。

我也对另一种没有重定向或打开新连接的方法持开放态度。

帮助表示赞赏

2 个答案:

答案 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);