通过C快速CGI:FCGX_Accept_r偶尔执行"Connection reset..."



我有一个单线程的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>rn", request.out)
FCGX_Finish_r(&request);

当我启动此代码时,打开浏览器并执行"127.0.0.1:1500",浏览器显示"连接重置",代码没有输出类似"OK"的内容,FCGX_Accept_r似乎冻结了。

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

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

但它不会产生任何影响。

我做错了什么?

如果您没有在url中指定架构,并且端口不特定于浏览器所理解的任何特定协议,那么浏览器将假设http://(或者现在可能是https?(。您的程序需要fastcgi,这是一个不同的协议,而库不理解HTTP。可能这个请求永远不会被接受。

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

最新更新