c++ - FastCGI 通过 C : FCGX_Accept_r occasionally perform "Connection reset..."

标签 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”,浏览器显示“连接重置”,代码输出没有类似“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/

相关文章:

c++ - 将文件名从 linux 中的标准输入管道传输到 C++

c++ - 具有可变参数模板和 va_args 的 function_traits

php - PHP 中的 XTEA 加密和 C 中的解密

php - spawn-fcgi 在多次连接后死亡

php - 如果 PHP 通过 FCGI 运行,我应该在每次加载页面后 $mysqli-> 关闭连接吗?

Microsoft Azure 上的 Python FastCGI 错误

c++ - 生成许多​​良好的均匀分布的随机数

C++试图返回一个 double 组的字符串(有点)

c++ - 如何使用 DP 用 n 种不同的颜色绘制 r x r 字段,而不在同一行使用相同的颜色

c# - 编码双字符指针返回值