通过C的FastCGI:FCGX_Accept_r有时会执行“连接重置...”

时间:2018-11-13 10:04:15

标签: c++ c fastcgi

我有一个单线程FastCGI“ Hello,World!”应用程序,有一些代码:

error = FCGX_Init();
// error handling

socket_descriptor = FCGX_OpenSocket("127.0.0.1:1500", 5);
// error handling

error = FCGX_InitRequest(&request, socket_descriptor, 0);
// error handling

std::cout << "Awaiting connect...";
bytes_accepted = FCGX_Accept_r(&request);
// error handling
std::cout << "OK!" << std::endl;

FCGX_PutS("<title>Hello!</title>\r\n", request.out)

FCGX_Finish_r(&request);

当我启动此代码时,打开浏览器并执行“ 127.0.0.1:1500”,浏览器显示“连接重置”,并且代码未输出任何类似“确定”的信息,FCGX_Accept_r似乎冻结了。

我试图用iptables在我的Debian 9 x64上打开适当的端口:

iptables -A INPUT -i eth0 -p tcp --destination-port 1500 -j ACCEPT
iptables-save

但不会产生任何效果。

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

如果您未在url中指定架构,并且端口不特定于浏览器能够理解的任何特定协议,那么浏览器将采用http://(或者最近可能是https?)。您的程序需要使用fastcgi,它是一个不同的协议,并且库不理解HTTP。可能该请求将永远不会被接受。

Fastcgi是用于与Web服务器通信的协议。您需要使用一个接受http请求的Web服务器,然后使用fastcgi协议转发这些请求。例如,nginx支持该协议。