通过 C 的 FastCGI:FCGX_Accept_r 偶尔执行 "Connection reset..."

FastCGI via C : FCGX_Accept_r occasionally perform "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>\r\n", request.out)

FCGX_Finish_r(&request);

当我启动此代码时,打开浏览器并执行“127.0.0.1:1500”,浏览器显示 "Connection reset" 并且代码输出与 "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 支持该协议。