我有一个单线程 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”,浏览器显示“连接重置”,代码输出没有类似“OK”的内容,FCGX_Accept_r 似乎卡住了。
我尝试使用 iptables 在 Debian 9 x64 上打开适当的端口:
iptables -A INPUT -i eth0 -p tcp --destination-port 1500 -j ACCEPT
iptables-save
但是没有任何效果。
我做错了什么?
最佳答案
当您没有在 url 中指定架构并且端口不特定于浏览器理解的任何特定协议(protocol)时,因此浏览器将假定 http://(或者现在可能是 https?)。您的程序需要 fastcgi,这是一个不同的协议(protocol),并且该库不理解 HTTP。也许这个请求永远不会被接受。
Fastcgi 是一种与 Web 服务器通信的协议(protocol)。您需要使用一个接受 http 请求并使用 fastcgi 协议(protocol)转发这些请求的 Web 服务器。例如,nginx支持该协议(protocol)。
关于c++ - FastCGI 通过 C : FCGX_Accept_r occasionally perform "Connection reset...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53278457/