FCGX_Accept_r 在 C 上的简单 FastCGI 应用程序中运行两次
FCGX_Accept_r runs twice in simple FastCGI application on C
我正在尝试创建用 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
为什么每个请求打印两次 "Accepted"?
如果我把真正的代码放在这里,例如查询一个数据库,它也会被执行两次。
您使用什么程序来发出网络请求?一些网络客户端也可能会请求例如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/" "..."
这可以通过检查网络服务器日志来确定,或者在 C 程序中添加调试以显示请求参数。仅使用 telnet
请求 GET / HTTP/1.0
,我没有看到使用 nginx
网络服务器的转发所有内容到 fcgi 网络服务器配置的双重命中。
我正在尝试创建用 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
为什么每个请求打印两次 "Accepted"? 如果我把真正的代码放在这里,例如查询一个数据库,它也会被执行两次。
您使用什么程序来发出网络请求?一些网络客户端也可能会请求例如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/" "..."
这可以通过检查网络服务器日志来确定,或者在 C 程序中添加调试以显示请求参数。仅使用 telnet
请求 GET / HTTP/1.0
,我没有看到使用 nginx
网络服务器的转发所有内容到 fcgi 网络服务器配置的双重命中。