FCGX_Accept_r在C

时间:2015-08-29 14:51:47

标签: c nginx fastcgi

我正在尝试创建用C编写的简单FastCGI应用程序:

#include <fcgiapp.h>
#include <stdio.h>
int main()
{
    int sockfd = FCGX_OpenSocket("127.0.0.1:9000", 1024);
    FCGX_Request request;

    FCGX_Init();
    FCGX_InitRequest(&request, sockfd, 0);

    while (FCGX_Accept_r(&request) == 0)
    {
        printf("Accepted\n");
        FCGX_FPrintF(request.out, "Content-type: text/html\r\n\r\n<h1>Hello World!</h1>");
        FCGX_Finish_r(&request);
    }
}

工作正常 - 当我从浏览器调用它时,它会显示“Hello World!”页面。消息。

问题是“while”中的代码两次,即我在终端中看到以下输出:

[root@localhost example]$ ./hello 
Accepted 
Accepted

为什么每次请求都会打印两次“已接受”? 如果我在这里输入实际代码,例如查询数据库,它也将被执行两次。

1 个答案:

答案 0 :(得分:4)

您使用什么程序发出网络请求?一些网络客户端也可以请求例如favicon.ico文件,可能会解释fcgi进程的第二个请求:

127.0.0.1 - - [29/Aug/2015:16:02:11 +0000] "GET / HTTP/1.1" 200 32 "-" "..."
127.0.0.1 - - [29/Aug/2015:16:02:11 +0000] "GET /favicon.ico HTTP/1.1" 200 32 "http://127.0.0.1/" "..."

这可以通过检查Web服务器日志或向C程序添加调试以显示请求参数来确定。仅使用telnet来请求GET / HTTP/1.0,我看不到使用nginx网络服务器进行前向一切到fcgi网络服务器配置的双击。